mirror of
https://github.com/tbamud/tbamud.git
synced 2025-09-21 21:40:49 +02:00
Updated World and files for 3.55 release. --Rumble
This commit is contained in:
parent
453cbdaf0b
commit
af18bd91b6
98 changed files with 7739 additions and 4409 deletions
45
changelog
45
changelog
|
@ -1,10 +1,16 @@
|
||||||
TbaMUD is currently being developed by The Builder Academy. If you need any
|
TbaMUD is currently being developed by The Builder Academy. If you need any
|
||||||
help, find any bugs, or have ideas for improvement please stop by TBA.
|
help, find any bugs, or have ideas for improvement please stop by TBA at
|
||||||
Rumble
|
telnet://tbamud.com:9091 or email rumble@tbamud.com --Rumble
|
||||||
The Builder Academy
|
|
||||||
builderacademy.net 9091
|
|
||||||
|
|
||||||
tbaMUD 3.55
|
tbaMUD 3.55
|
||||||
|
[Jan 17 2008] - Rumble
|
||||||
|
Updated files for 3.55 release.
|
||||||
|
Updated documentation in the /doc directory.
|
||||||
|
[Jan 16 2008] - Rumble
|
||||||
|
New content management system (drupal) at http://tbamud.com. Forums, blogs, etc. (thanks Mordecai)
|
||||||
|
Converted all of /doc pdf's back to text files. PDF versions will be on http://tbamud.com
|
||||||
|
Updated tell m-w command due to html changes. (thanks Welcor)
|
||||||
|
Renamed lib/text/help/screen and iscreen files to help and ihelp.
|
||||||
[Jan 06 2008] - Rumble
|
[Jan 06 2008] - Rumble
|
||||||
Removed break in oedit_disp_val1_menu ITEM_NOTE that caused a delay. (thanks Rhade)
|
Removed break in oedit_disp_val1_menu ITEM_NOTE that caused a delay. (thanks Rhade)
|
||||||
Fixed tlist when specifying a range. (thanks Rhade)
|
Fixed tlist when specifying a range. (thanks Rhade)
|
||||||
|
@ -27,6 +33,7 @@ tbaMUD 3.55
|
||||||
[Dec 15 2007] - Rumble
|
[Dec 15 2007] - Rumble
|
||||||
Showvnums shows [T#] for a single attached trig or [TRIGS] for multiple attached trigs (except for rooms since there is plenty of room to list all attached trigs).
|
Showvnums shows [T#] for a single attached trig or [TRIGS] for multiple attached trigs (except for rooms since there is plenty of room to list all attached trigs).
|
||||||
Fixed bug where showvnums would not show if attached. (thanks Sryth)
|
Fixed bug where showvnums would not show if attached. (thanks Sryth)
|
||||||
|
|
||||||
tbaMUD 3.54
|
tbaMUD 3.54
|
||||||
[Nov 12 2007] - Rumble
|
[Nov 12 2007] - Rumble
|
||||||
Updated users command to fix GET_INVIS_LEV bug.
|
Updated users command to fix GET_INVIS_LEV bug.
|
||||||
|
@ -467,32 +474,4 @@ Version 3.53 release: July, 2007
|
||||||
Version 3.52 release: April, 2007
|
Version 3.52 release: April, 2007
|
||||||
Version 3.51 release: February, 2007
|
Version 3.51 release: February, 2007
|
||||||
Version 3.5 release: December, 2006
|
Version 3.5 release: December, 2006
|
||||||
Version 3.1 (yes, no beta pl): November 18, 2002
|
See releases.txt
|
||||||
Version 3.00 beta pl22 release: October 4, 2002
|
|
||||||
Version 3.00 beta pl21 release: April 15, 2002
|
|
||||||
Version 3.00 beta pl20 release: January 15, 2002
|
|
||||||
Version 3.00 beta pl19 release: August 14, 2001
|
|
||||||
Version 3.00 beta pl18 release: March 18, 2001
|
|
||||||
Version 3.00 beta pl17 release: January 23, 2000
|
|
||||||
Version 3.00 beta pl16 release: August 30, 1999
|
|
||||||
Version 3.00 beta pl15 release: March 16, 1999
|
|
||||||
Version 3.00 beta pl14 release: July 3, 1998
|
|
||||||
Version 3.00 beta pl13a release: June 4, 1998
|
|
||||||
Version 3.00 beta pl13 release: June 1, 1998
|
|
||||||
Version 3.00 beta pl12 release: October 29, 1997
|
|
||||||
Version 3.00 beta pl11 release: April 14, 1996
|
|
||||||
Version 3.00 beta pl10 release: March 11, 1996
|
|
||||||
Version 3.00 beta pl9 release: February 6, 1996
|
|
||||||
Version 3.00 beta pl8 release: May 23, 1995
|
|
||||||
Version 3.00 beta pl7 release: March 9, 1995
|
|
||||||
Version 3.00 beta pl6 release: March 6, 1995
|
|
||||||
Version 3.00 beta pl5 release: February 23, 1995
|
|
||||||
Version 3.00 beta pl4 release: September 28, 1994
|
|
||||||
Version 3.00 beta pl1-3, internal releases for beta-testers.
|
|
||||||
Version 3.00 alpha: Ran on net for testing. Code not released.
|
|
||||||
Version 2.20 release: November 17, 1993
|
|
||||||
Version 2.11 release: September 19, 1993
|
|
||||||
Version 2.10 release: September 1, 1993
|
|
||||||
Version 2.02 release: Late August 1993
|
|
||||||
Version 2.01 release: Early August 1993
|
|
||||||
Version 2.00 release: July 16, 1993 (Initial public release)
|
|
||||||
|
|
BIN
doc/FAQ.pdf
BIN
doc/FAQ.pdf
Binary file not shown.
857
doc/FAQ.txt
Normal file
857
doc/FAQ.txt
Normal file
|
@ -0,0 +1,857 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
Frequently Asked Questions (FAQ) for tbaMUD with Answers
|
||||||
|
|
||||||
|
This file is intended to cover common questions related to tbaMUD. Any
|
||||||
|
contributions and corrections are more than welcome. It is currently
|
||||||
|
maintained by Rumble of the Builder Academy. Please stop by the Builder
|
||||||
|
Academy if you have any corrections or additions: tbamud.com 9091
|
||||||
|
This FAQ was originally written by Ryan Watkins (VampLestat) and later
|
||||||
|
maintained by Alex Flectcher (Furry).
|
||||||
|
|
||||||
|
Other great resources are online at: http://tbamud.com
|
||||||
|
______________________________________________________________________
|
||||||
|
|
||||||
|
Table of Contents
|
||||||
|
|
||||||
|
1. Introduction
|
||||||
|
1.1 I've never played a MUD before. What should I do?
|
||||||
|
1.2 I'm new to C and/or coding. What do I do?
|
||||||
|
1.3 I want to build my own MUD. Where do I start?
|
||||||
|
1.4 What is tbaMUD?
|
||||||
|
1.5 What is the history of tbaMUD?
|
||||||
|
1.6 Where is the original tbaMUD so I can check it out?
|
||||||
|
1.7 Will the tbaMUD creators visit my mud?
|
||||||
|
1.8 What is UNIX?
|
||||||
|
|
||||||
|
2. Resources
|
||||||
|
2.1 Where do I find the source code for tbaMUD?
|
||||||
|
2.2 Where do I find areas, etc. for tbaMUD?
|
||||||
|
2.3 I have questions about tbaMUD. Where should I go?
|
||||||
|
2.4 To what platforms has tbaMUD been ported?
|
||||||
|
2.5 How can I submit code or areas for use with tbaMUD?
|
||||||
|
2.6 How do I use a patch file and how can I make one?
|
||||||
|
|
||||||
|
3. Compiling tbaMUD
|
||||||
|
3.1 Why do I get many syntax errors with Sun's ``cc'' compiler?
|
||||||
|
3.2 Why do I get all sorts of errors with ``crypt'' functions and header files?
|
||||||
|
3.3 When I try to compile, why do I get a lot of undefined symbols
|
||||||
|
referenced in comm.o for functions like socket, accept, and bind?
|
||||||
|
3.4 Every time I try to compile tbaMUD (or any other piece of software)
|
||||||
|
under Linux, it gives me errors and says it cannot find include header
|
||||||
|
files in the linux/ and asm/ directories. What can I do?
|
||||||
|
3.5 I'm getting compilation errors from a header file, and I didn't even
|
||||||
|
change it?
|
||||||
|
3.6 I'm trying to compile the MUD on Windows and am having problems,
|
||||||
|
what can I do?
|
||||||
|
3.7 How can I do a ``grep'' on Windows?
|
||||||
|
3.8 While compiling the MUD, why do I get errors like ``foo.c:1231:
|
||||||
|
Undefined symbol `_whereamI' referenced from text segment''
|
||||||
|
3.9 What is a parse error and how do I fix it?
|
||||||
|
3.10 I have this piece of code that calls bcopy(), bzero(), and bcmp()
|
||||||
|
and it won't compile, so what can I do?
|
||||||
|
3.11 My compiler doesn't have ``strdup()'', what can I do?
|
||||||
|
3.12 I am having trouble with my ``makefile'', what could be the problem?
|
||||||
|
3.13 How can I handle directories in C?
|
||||||
|
|
||||||
|
4. Running tbaMUD
|
||||||
|
4.1 I typed ``autorun'' but then my terminal just froze.
|
||||||
|
4.2 I typed ``bin/circle'' and got lots of boot messages, but then it
|
||||||
|
said ``Entering game loop'' and froze.
|
||||||
|
4.3 Okay, I think the MUD is running but why don't I get a login prompt?
|
||||||
|
4.4 How come I get this error when running my MUD: ``Error reading board:
|
||||||
|
No such file or directory''
|
||||||
|
4.5 I just got this SIGPIPE, what is it and what Can I Do About It?
|
||||||
|
4.6 When I run tbaMUD under Linux, it tells me ``gethostbyaddr:
|
||||||
|
connection refused'' when the MUD boots, and then dies. Why?
|
||||||
|
4.7 When I run tbaMUD under Windows, it tells me ``Winsock error
|
||||||
|
#10047'' when the MUD boots, and then dies. Why?
|
||||||
|
4.8 When I run tbaMUD under Windows, players can't rent---their
|
||||||
|
equipment is just dropped on the ground, syslogs don't work, so what
|
||||||
|
is the problem?
|
||||||
|
4.9 When someone logs on to my Windows MUD, the console screen gives:
|
||||||
|
``gethostbyaddr: No such file or directory''
|
||||||
|
4.10 My MUD crashed and my connection got closed. What can I do?
|
||||||
|
4.11 Ok, so how do I use ``gdb''?
|
||||||
|
4.12 How can I hunt bugs more effectively?
|
||||||
|
4.13 I just added n levels to my MUD (from the stock 34). How do I set
|
||||||
|
my imps up to level n without a pfile wipe?
|
||||||
|
4.14 I decided to wipe my pfile away anyway. What steps should I take to
|
||||||
|
do this?
|
||||||
|
4.15 I want to expand the ability to pk in my MUD, allowing ASSASSINS
|
||||||
|
that'll be able to PK without getting flagged. How can I do this?
|
||||||
|
4.16 Why does it say ``Connection closed by foreign host.'' and not
|
||||||
|
display the ``Byebye!'' message I'm trying to send before cutting
|
||||||
|
someone off?
|
||||||
|
4.17 How do I get the tbaMUD to autoload when the Linux server is
|
||||||
|
restarted?
|
||||||
|
4.18 My server shuts down my MUD everytime I logoff. How do I keep the
|
||||||
|
MUD running when I logoff?
|
||||||
|
|
||||||
|
5. tbaMUD Questions
|
||||||
|
5.1 Why does tbaMUD use BUF switches all through the code, what's
|
||||||
|
happening here?
|
||||||
|
5.2 How do I add a new class? How do I add more levels? etc?
|
||||||
|
|
||||||
|
______________________________________________________________________
|
||||||
|
|
||||||
|
1. Introduction
|
||||||
|
|
||||||
|
1.1. I've never played a MUD before. What should I do?
|
||||||
|
|
||||||
|
Don't try to use your own copy of tbaMUD! There are two levels of MUD users:
|
||||||
|
players and administrators. Administrators do what you're trying to do now --
|
||||||
|
get a copy of a MUD's source code, compile it, and run it. Players use MUDs
|
||||||
|
that are being administered by someone else. If you try to actually run a MUD
|
||||||
|
before you've ever played one, you'll get very confused indeed! Your best bet
|
||||||
|
for now is to play someone else's MUD first. There are a large number of
|
||||||
|
excellent MUDs out there already, some of which are based on tbaMUD code. Check
|
||||||
|
out other tbaMUD's at: http://www.tbamud.com/forum?c=showthread&ThreadID=86
|
||||||
|
|
||||||
|
1.2. I'm new to C and/or coding. What do I do?
|
||||||
|
|
||||||
|
First, a MUD is not a learning project. It has tens of thousands of lines to
|
||||||
|
it, many of which are obscure and unclear to even moderately skilled
|
||||||
|
programmers. Those little, ``Hello, world,'' programs are for learning,
|
||||||
|
maybe little math tests, etc. A MUD is a pretty ambitous project to start
|
||||||
|
with. That's like trying to run before you can walk, and while there's more
|
||||||
|
difficult things than a MUD to start with, there's a ton of easier things you
|
||||||
|
should start with. Second, if you are persistent, get a good C reference book
|
||||||
|
and read the code, try to comprehend what everything is doing (to some small
|
||||||
|
extent). You should probably avoid comm.c as it is home to the socket
|
||||||
|
functions which general C books don't cover and are usually explained in other
|
||||||
|
books on network programming. Then try small projects, something similar to
|
||||||
|
what already exists. This way, you can get away with a cut-and-paste job and
|
||||||
|
changing some of the code. Adding a simple version of races isn't all that
|
||||||
|
difficult, just examine the class code in class.c and the CON_QCLASS block in
|
||||||
|
interpreter.c, cut, paste, and modify. Also look at structs.h, for "#define
|
||||||
|
CLASS_" You'll begin understanding more and more of the code as you copy and
|
||||||
|
change it, eventually you'll be able to write a whole function by yourself.
|
||||||
|
Spend time learning, going with haste will hurt you more than it will help you.
|
||||||
|
Many patches and tutorials are available at: http://tbamud.com (such as adding
|
||||||
|
races, classes, liquids, skills, spells, etc.
|
||||||
|
|
||||||
|
1.3. I want to build my own MUD. Where do I start?
|
||||||
|
|
||||||
|
Many common questions arise from new MUD admins. It is a good idea to pay
|
||||||
|
attention to them and take their answers to heart. These include things
|
||||||
|
like the following:
|
||||||
|
|
||||||
|
I don't have any coding experience with MUDs, but do have a lot of ideas for
|
||||||
|
my own. I have played many MUDs for a LONG time, though.
|
||||||
|
|
||||||
|
Read the FAQ. MUD Experience doesn't help a huge amount. Code experience
|
||||||
|
does.
|
||||||
|
|
||||||
|
I am interested in having a level system of 1-50 mortal and 51-60 imms. I
|
||||||
|
am also interested in adding races and classes. How can I accomplish these
|
||||||
|
things?
|
||||||
|
|
||||||
|
By checking out the content at http://www.tbamud.com.
|
||||||
|
|
||||||
|
1.4. What is tbaMUD?
|
||||||
|
|
||||||
|
TbaMUD is a DikuMUD derivitave, developed by Jeremy Elson as CircleMUD from
|
||||||
|
Gamma v0.0 of DikuMUD created by Hans Henrik Staerfeldt, Katja Nyboe, Tom
|
||||||
|
Madsen, Michael Seifert and Sebastian Hammer at DIKU (Computer Science
|
||||||
|
Instutute at Copenhagen University). Note that CircleMUD is a Diku
|
||||||
|
derivative, so its users must follow the DIKU license agreement---most
|
||||||
|
notably it cannot be used to make money in ANY way, the original developers'
|
||||||
|
names must be in the login screen and that the credits command always presents
|
||||||
|
the same information, etc.
|
||||||
|
|
||||||
|
tbaMUD's vision is to provide the MUDding community a stable and functional
|
||||||
|
codebase that includes an in-depth World and help files that makes it ready
|
||||||
|
to be molded into a custom MUD by its coders and builders. We also provide
|
||||||
|
multiple resources to allow for feedback, contribution, and the sharing of
|
||||||
|
ideas within the MUDding community to ensure constant development and
|
||||||
|
improvements.
|
||||||
|
|
||||||
|
TbaMUD is highly developed from the programming side, but highly UNdeveloped
|
||||||
|
on the game-playing side. So, if you're looking for a huge MUD with billions
|
||||||
|
of spells, skills, classes, and races, tbaMUD will disappoint you. TbaMUD still
|
||||||
|
has only the 4 original Diku classes, the original spells, and the original
|
||||||
|
skills. On the other hand, if you're looking for a highly stable, developed,
|
||||||
|
organized, and well documented "blank slate" MUD on which you can put your OWN
|
||||||
|
ideas for spells, skills, and classes, then tbaMUD is what what you are looking
|
||||||
|
for.
|
||||||
|
|
||||||
|
1.5. What is the history of tbaMUD?
|
||||||
|
|
||||||
|
TBA stands for The Builder Academy.
|
||||||
|
|
||||||
|
TBA was created in 2000 on Cruel World which was being run by Zemial and Welcor.
|
||||||
|
I began combining my own experience with the work of others into an extensive
|
||||||
|
tutorial zone, help files, and examples. Welcor and I ended up separating TBA
|
||||||
|
from Cruel World to further enhance our training of new builders. Welcor has
|
||||||
|
taken over the development of Trigedit and has contributed extensively to what
|
||||||
|
has now evolved into the tbaMUD release.
|
||||||
|
|
||||||
|
After offering several times to take over CircleMUD development TBA released
|
||||||
|
CircleMUD 3.5 and later changed the codebase name to tbaMUD. TBA now has many
|
||||||
|
purposes including: Developing trigedit, OLC, the tbaMUD codebase, and all the
|
||||||
|
zones.
|
||||||
|
|
||||||
|
TbaMUD's vision is to provide the MUDding community a stable and functional
|
||||||
|
codebase that includes an in-depth World and help files that makes it ready
|
||||||
|
to be molded into a custom MUD by its coders and builders. We also provide
|
||||||
|
multiple resources to allow for feedback, contribution, and the sharing of
|
||||||
|
ideas within the MUDding community to ensure constant development and
|
||||||
|
improvements.
|
||||||
|
|
||||||
|
TbaMUD is highly developed from the programming side, but highly UNdeveloped
|
||||||
|
on the game-playing side. So, if you're looking for a huge MUD with billions
|
||||||
|
of spells, skills, classes, and races, tbaMUD will disappoint you. TbaMUD still
|
||||||
|
has only the 4 original Diku classes, the original spells, and the original
|
||||||
|
skills. On the other hand, if you're looking for a highly stable, developed,
|
||||||
|
organized, and well documented "blank slate" MUD on which you can put your OWN
|
||||||
|
ideas for spells, skills, and classes, then tbaMUD is what what you are looking
|
||||||
|
for.
|
||||||
|
|
||||||
|
See release.txt for a release history.
|
||||||
|
|
||||||
|
For builders TBA is a low stress, no deadline, training environment. Where
|
||||||
|
anyone with motivation can work at their own pace to learn as much or as
|
||||||
|
little as they wish. Numerous people are available to answer questions and
|
||||||
|
give advice. 1000's of builders served and counting.
|
||||||
|
|
||||||
|
1.6. Where is the original tbaMUD so I can check it out?
|
||||||
|
|
||||||
|
The Builder Academy
|
||||||
|
tbamud.com 9091
|
||||||
|
|
||||||
|
1.7 Will the tbaMUD creators visit my mud?
|
||||||
|
|
||||||
|
While there is a possibility that one (or more) of the tbaMUD creators will
|
||||||
|
drop by your MUD for a visit, to play, or to simply look around, there is a
|
||||||
|
slim chance that they will identify themselves. We don't want free wizzes
|
||||||
|
or favors for our work here. In fact, we will state categorically that if
|
||||||
|
anyone comes on your MUD claiming to be associated with us, they aren't.
|
||||||
|
|
||||||
|
1.8. What is UNIX?
|
||||||
|
|
||||||
|
UNIX is not an operating system of itself, it's a type (flavour, if you
|
||||||
|
will) of operating systems. Many different kinds of UNIXes exist. Some of
|
||||||
|
them are free, some of them are not. How to tell if you have a UNIX
|
||||||
|
operating system? Well, UNIXes have the `ps' command, tend to have a `%' or
|
||||||
|
`#' prompt, give you a home directory, `who' will show who else is on the
|
||||||
|
system, etc. Many UNIX systems (such as Linux) strive to be POSIX
|
||||||
|
compatible, so you'll probably see POSIX mentioned, too. POSIX is, roughly,
|
||||||
|
the standards which UNIX operating systems go by. It says what makes an
|
||||||
|
operating system part of the UNIX family and so forth. Some UNIX operating
|
||||||
|
systems are not 100% POSIX compatible, actually, most aren't. The following
|
||||||
|
are types of UNIX (but not all the existing flavours): Linux, FreeBSD, BSD,
|
||||||
|
BSDi, Solaris. There are others. UNIX operating systems are command-based
|
||||||
|
and Microsoft does not make a variant.
|
||||||
|
|
||||||
|
2. Resources
|
||||||
|
|
||||||
|
2.1. Where do I find the source code for tbaMUD?
|
||||||
|
|
||||||
|
TbaMUD's complete source code and areas are available for download at:
|
||||||
|
http://tbamud.com
|
||||||
|
|
||||||
|
2.2. Where do I find areas, etc. for tbaMUD?
|
||||||
|
|
||||||
|
All donated areas have been added to the latest version of tbaMUD. If you
|
||||||
|
wish to donate some of your own work stop by the Builder Academy.
|
||||||
|
|
||||||
|
2.3. I have questions about tbaMUD. Where should I go?
|
||||||
|
|
||||||
|
Stop by The Builder Academy at tbamud.com 9091 or the website at:
|
||||||
|
http://tbamud.com
|
||||||
|
|
||||||
|
If you have general questions about the MUD such as how to get it running,
|
||||||
|
how to add new spells, how to add new skills, etc., the first place you
|
||||||
|
should look is the documentation. `coding.txt' will have information about
|
||||||
|
how to add new spells, skills, commands, etc. `building.txt' has information
|
||||||
|
about the World file formats and how to read the files, etc. There are many
|
||||||
|
other documents in the doc directory with useful information, read them all.
|
||||||
|
|
||||||
|
If you still have questions after reading the doucmentation, check out:
|
||||||
|
|
||||||
|
http://tbaMUD.com/
|
||||||
|
http://cwg.lazuras.org/modules.php?name=Forums
|
||||||
|
http://groups.yahoo.com/group/circle-newbies/
|
||||||
|
http://post.queensu.ca/cgi-bin/listserv/wa?SUBED1=circle&A=1
|
||||||
|
http://groups.yahoo.com/group/dg_scripts/
|
||||||
|
|
||||||
|
2.4. To what platforms has tbaMUD been ported?
|
||||||
|
|
||||||
|
TbaMUD is very portable because it uses the GNU autoconf system, meaning you
|
||||||
|
only need to type ``configure'' to have it automatically determine various
|
||||||
|
features of your system and configure the code accordingly. TbaMUD compiles
|
||||||
|
without changes under most BSD and SVR4 systems, including SunOS, Solaris,
|
||||||
|
Ultrix, IRIX, AIX, Linux, BSD/OS, HP/UX, and others.
|
||||||
|
|
||||||
|
TbaMUD has also been ported to various non-UNIX platforms. You can now
|
||||||
|
compile it under OS/2 2.x and 3.x with the OS/2 port of gcc, Windows using
|
||||||
|
Microsoft Visual C++ version 4.0 or 5.0, Cygwin, Borland (now Inprise) C++,
|
||||||
|
Watcom v.11, Cygnus GNU-WIN32, LCC, Macintosh with CodeWarrior, Amiga, and
|
||||||
|
Acorn RiscOS.
|
||||||
|
|
||||||
|
2.5. How can I submit code or areas for use with tbaMUD?
|
||||||
|
|
||||||
|
Stop by the Builder Academy. tbamud.com 9091 or visit http://tbamud.com
|
||||||
|
|
||||||
|
2.6. How do I use a patch file and how can I make one?
|
||||||
|
|
||||||
|
Patch files are created and used via the ``diff'' and ``patch'' utilities,
|
||||||
|
respectively. These are the various parameters to use with diff (all work in
|
||||||
|
general on unix based systems, but check out the help entries to be certain.
|
||||||
|
|
||||||
|
diff -uN [original_src_directory] [altered_src_directory] > Patch
|
||||||
|
|
||||||
|
-u is the unified output. ie. it tells diff to output the text what is
|
||||||
|
called ``patch'' style. On some systems, you will have to use -c but it
|
||||||
|
generates much larger and harder to follow patches.
|
||||||
|
|
||||||
|
-N Tells diff to treat files that are in one directory and not there in the
|
||||||
|
other as being empty in the one they are not there. It allows entire files
|
||||||
|
to be included into the patch.
|
||||||
|
|
||||||
|
-r recursive, add r to the uN above if you want it to recursively add in
|
||||||
|
any subdirectories. (be careful with this one)
|
||||||
|
|
||||||
|
-p Tells diff to indicate what function is being ``patched'' in each
|
||||||
|
section. This may not be supported by all versions of ``diff.''
|
||||||
|
|
||||||
|
If you download a patch file and would like to add it to your code, first
|
||||||
|
make sure to read any instructions that the patch author might have written.
|
||||||
|
The command used to add the patch may vary depending on how the patch was
|
||||||
|
created. This should be given in the first line of the patch or in the
|
||||||
|
instructions. Normally, if using GNU patch with a unified diff, the command
|
||||||
|
should be:
|
||||||
|
|
||||||
|
patch -u < [patchfile]
|
||||||
|
|
||||||
|
If the patch was created with a SYSV patcher (i.e. not a unified diff), the
|
||||||
|
patch should be added with:
|
||||||
|
|
||||||
|
patch -c < [patchfile]
|
||||||
|
|
||||||
|
Of course, if the instructions state otherwise, ignore any instructions
|
||||||
|
given here and follow the instructions given with the patchfile instead.
|
||||||
|
|
||||||
|
Finally, in modern patches, there are three characters of interest to note:
|
||||||
|
|
||||||
|
o ! :: The line changes between new and old.
|
||||||
|
o + :: This line is added to the old to make the new.
|
||||||
|
o - :: This line is removed from the old to make the new.
|
||||||
|
o The rest of the lines are just there to give you an idea of where
|
||||||
|
to change.
|
||||||
|
|
||||||
|
3. Compiling tbaMUD
|
||||||
|
|
||||||
|
3.1. Why do I get many syntax errors with Sun's ``cc'' compiler?
|
||||||
|
|
||||||
|
Because tbaMUD is written in ANSI C, and Sun's standard cc compiler isn't
|
||||||
|
capable of compiling ANSI C code. You can try acc, Sun's ANSI C compiler,
|
||||||
|
but it costs extra money to get it from Sun so your sysadmin may not have
|
||||||
|
installed it. Most don't. The best solution is to get the GCC compiler
|
||||||
|
from the GNU FTP site (ftp://ftp.gnu.org/pub/gnu) and install it, if you
|
||||||
|
have enough time and space.
|
||||||
|
|
||||||
|
3.2. Why do I get all sorts of errors with ``crypt'' functions and
|
||||||
|
header files?
|
||||||
|
|
||||||
|
TbaMUD normally uses the UNIX crypt() function to enrypt players' passwords.
|
||||||
|
Because of export restrictions imposed by the U.S., some systems do not have
|
||||||
|
the crypt() function. ``configure'' will usually be able to figure out
|
||||||
|
whether or not your system has crypt(), but if it guesses incorrectly and
|
||||||
|
you see problems with the crypt() function or headers, you can manually
|
||||||
|
disable password encryption by going into the sysdep.h source file and
|
||||||
|
uncommenting the line that reads:
|
||||||
|
|
||||||
|
#define NOCRYPT
|
||||||
|
|
||||||
|
Be warned, however, that doing this causes the MUD to store players'
|
||||||
|
passwords in plaintext rather than as encrypted strings. Also, if you move
|
||||||
|
from a system which has crypt to one that doesn't, players won't be able to
|
||||||
|
log in with their old passwords!
|
||||||
|
|
||||||
|
3.3. When I try to compile, why do I get a lot of undefined symbols
|
||||||
|
referenced in comm.o for functions like socket, accept, and bind?
|
||||||
|
|
||||||
|
SVR4 systems require the socket and nsl libraries for network programs. You
|
||||||
|
shouldn't see this error any more with version 3.0 because ``configure''
|
||||||
|
should automatically use those libraries for you; however, if you still have
|
||||||
|
problems, try adding ``-lsocket -lnsl'' to the line in the Makefile that
|
||||||
|
links all the object files together into the 'circle' binary.
|
||||||
|
|
||||||
|
If you're using V2.20 and you have this error, the best thing to do is
|
||||||
|
simply to use V3.0 instead. If you insist on using 2.20, go into the
|
||||||
|
Makefile and search for the comment next to ``SVR4''.
|
||||||
|
|
||||||
|
3.4. Every time I try to compile tbaMUD (or any other piece of software)
|
||||||
|
under Linux, it gives me errors and says it cannot find include header
|
||||||
|
files in the linux/ and asm/ directories. What can I do?
|
||||||
|
|
||||||
|
Under Linux, you cannot compile any program unless you install the kernel
|
||||||
|
source code because the kernel source includes the ANSI C header files. You
|
||||||
|
need the files in /usr/include/linux, which are distributed separately from
|
||||||
|
the rest of /usr/include.
|
||||||
|
|
||||||
|
The easiest way to do this if you're using the Slackware Linux distribution
|
||||||
|
is simply to install the 'K' series of disks which is the kernel source.
|
||||||
|
|
||||||
|
Otherwise, you'll have to set up your include files manually. The easiest
|
||||||
|
way to get these is to download kernel source from:
|
||||||
|
|
||||||
|
http://www.kernel.org/mirrors/
|
||||||
|
|
||||||
|
Get the kernel source that matches the kernel you're running (type `uname
|
||||||
|
-a' to find your kernel version). Then unpack the kernel into the usr/src
|
||||||
|
/directory. It's about 13 megabytes compressed and 54 megabytes
|
||||||
|
uncompressed (For the 2.2.9 kernel).
|
||||||
|
|
||||||
|
Read the README file that comes with the kernel, and make the symbolic links
|
||||||
|
you need for /usr/include/asm and /usr/include/linux.
|
||||||
|
|
||||||
|
Now compile the MUD. This will take care of most of the errors. You may
|
||||||
|
have to do `make config' and `make dep' in /usr/src/linux as well, in order
|
||||||
|
to make linux/config.h and other files that get generated by these steps.
|
||||||
|
|
||||||
|
You can remove the whole kernel source tree except for include/ at
|
||||||
|
this point and get most of your 48.5 megs back.
|
||||||
|
|
||||||
|
(Thanks to Michael Chastain for providing this answer.)
|
||||||
|
|
||||||
|
3.5. I'm getting compilation errors from a header file, and I didn't even
|
||||||
|
change it?
|
||||||
|
|
||||||
|
Okay, if you really didn't change ``structs.h'' then the error isn't in
|
||||||
|
``structs.h''. I think I've seen 2 cases where this has happened, the
|
||||||
|
first, is that the header file you included right before the header file
|
||||||
|
messing has an error in it. I can't really say much beyond that, but look
|
||||||
|
for a missing semicolon, are any other errors you can find.
|
||||||
|
|
||||||
|
If you include files out of order, it can mess things up. For example, B.h
|
||||||
|
has stuff in it that is defined in A.h, and if you include B.h before A.h,
|
||||||
|
you can get errors, your best bet here is to mess with the order of the
|
||||||
|
headers, making sure you put ``conf.h'' and ``sysdep.h'' at the top,
|
||||||
|
followed by ``structs.h'', ``utils.h'', etc. Any file specific headers
|
||||||
|
should be the last one included just for coding style.
|
||||||
|
|
||||||
|
3.6. I'm trying to compile the mud on Windows and am having problems,
|
||||||
|
what can I do?
|
||||||
|
|
||||||
|
The first thing to do is to make sure you are compiling a recent version of
|
||||||
|
the source code. Patch Level 11 and onwards all support Windows winsock
|
||||||
|
sockets now. Second, you should ensure that you have carefully read the
|
||||||
|
README.WIN file for instructions on what to include. Next, ensure that you
|
||||||
|
are using a C compiler that supports long filenames (for example, MSVC 4.0
|
||||||
|
does, MSVC 1.0 does not). If you happen to be trying to patch something
|
||||||
|
into your code, you should use patch for DOS
|
||||||
|
(ftp://204.119.24.14/pub/patch/patch12.zip). This does not support long
|
||||||
|
filenames (but can be used with short filenames).
|
||||||
|
|
||||||
|
3.7. How can I do a ``grep'' on Windows?
|
||||||
|
|
||||||
|
1. Select ``start menu''->``find''->``files or folders''
|
||||||
|
2. Enter the files/dirs to search in.
|
||||||
|
3. Select ``Advanced''
|
||||||
|
4. In the ``Containing Text'' input box, type in the text you want.
|
||||||
|
5. Double click on a match to bring up the file that matched.
|
||||||
|
Even better is to use MSVC's find command (if you have it).
|
||||||
|
|
||||||
|
3.8. While compiling the mud, why do I get errors like ``foo.c:1231:
|
||||||
|
Undefined symbol `_whereamI' referenced from text segment''
|
||||||
|
|
||||||
|
You forgot to include a source file into the make. Go edit your Makefile
|
||||||
|
and make sure all the necessary *.c files are in there, in particular,
|
||||||
|
whichever C file defines the function that the compiler is complaining is
|
||||||
|
undefined. If all else fails, try deleting all the *.o files and
|
||||||
|
recompiling from scratch.
|
||||||
|
|
||||||
|
3.9. What is a parse error and how do I fix it?
|
||||||
|
|
||||||
|
A parsing error is often a missing or extra semicolon, parenthesis, or
|
||||||
|
bracket ({).
|
||||||
|
|
||||||
|
If the parse error is before a semicolon at the end of a line of code, it is
|
||||||
|
something on that line.
|
||||||
|
|
||||||
|
If it is at the beginning of a line within a function, it is usually a
|
||||||
|
missing semicolon on the previous line.
|
||||||
|
|
||||||
|
If it is at the beginning of a function, count your brackets (especially the
|
||||||
|
{} ones) in the previous function.
|
||||||
|
|
||||||
|
I can't think of any other parse errors. These are the ones I commonly see.
|
||||||
|
With a bit of practice, they are very easy to locate and fix. For a more
|
||||||
|
detailed explanation, check out the C Language FAQ.
|
||||||
|
|
||||||
|
3.10. I have this piece of code that calls bcopy(), bzero(), and bcmp() and
|
||||||
|
it won't compile, so what can I do?
|
||||||
|
|
||||||
|
All three of these functions are fairly standard on BSD systems. However,
|
||||||
|
they are not considered to be very portable, and thus should be redefined.
|
||||||
|
For example, the equivalents for SYSV are:
|
||||||
|
|
||||||
|
#define bcopy(from,to,len) memmove(to,from,len)
|
||||||
|
#define bzero(mem,len) memset(mem,0,len)
|
||||||
|
#define bcmp(a,b,len) memcmp(a,b,len)
|
||||||
|
|
||||||
|
3.11. My compiler doesn't have ``strdup()'', what can I do?
|
||||||
|
|
||||||
|
Use tbaMUD's built-in str_dup() function instead.
|
||||||
|
|
||||||
|
3.12. I am having trouble with my ``makefile'', what could be the problem?
|
||||||
|
|
||||||
|
If you used cut and paste to insert items into your makefile, it is likely
|
||||||
|
that you accidentally put spaces at the beginning of lines where tabs are
|
||||||
|
needed. This is how the makefile must be constructed:
|
||||||
|
|
||||||
|
foo.o: foo.c conf.h sysdep.h structs.h utils.h interpreter.h \
|
||||||
|
handler.h db.h
|
||||||
|
{TAB}$(CC) -c $(CFLAGS)
|
||||||
|
|
||||||
|
To add these lines properly, you can use gcc to assist you with the
|
||||||
|
following shell script (from Daniel Koepke):
|
||||||
|
|
||||||
|
#!/bin/sh
|
||||||
|
gcc -MM $1 >> Makefile
|
||||||
|
echo "{TAB}\$(CC) -c \$(CFLAGS) $1" >> Makefile
|
||||||
|
|
||||||
|
To use this script, replace {TAB} with a tab, and then run the script
|
||||||
|
like: add_file foo.c
|
||||||
|
|
||||||
|
3.13. How can I handle directories in C?
|
||||||
|
|
||||||
|
Note that this seems only to be valid for UNIX OSes. Handling of
|
||||||
|
directories is accomplished through the dirent.h and sys/types.h files. The
|
||||||
|
function opendir() returns a ``DIR*'' pointer (it's like but not the same as
|
||||||
|
the ``FILE *'' pointer) when you pass it the name of a directory to open or
|
||||||
|
NULL if it can't open the dir. After the directory has been opened, you can
|
||||||
|
step through the files or search for particular files, etc. using readdir(),
|
||||||
|
seekdir(), and scandir(). When you reach the end of the directory list, you
|
||||||
|
can either go back to the start with rewinddir() or close the directory with
|
||||||
|
closedir(). The following code (which has not been tested) should open a
|
||||||
|
directory and go through it one by one and prints the filenames:
|
||||||
|
|
||||||
|
struct dirent * ffile;
|
||||||
|
DIR * my_dir;
|
||||||
|
|
||||||
|
if (!(my_dir = opendir("foo")))
|
||||||
|
return;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
if (!(dirent = readdir(my_dir)))
|
||||||
|
break;
|
||||||
|
printf("%s\n", dirent->d_name);
|
||||||
|
}
|
||||||
|
|
||||||
|
closedir(my_dir);
|
||||||
|
|
||||||
|
The dirent structure contains only two useful elements, the file's name
|
||||||
|
(d_name) and the files length (d_reclen).
|
||||||
|
|
||||||
|
Thanks to Daniel Koepke for the above.
|
||||||
|
|
||||||
|
4. Running tbaMUD
|
||||||
|
|
||||||
|
4.1. I typed ``autorun'' but then my terminal just froze.
|
||||||
|
|
||||||
|
autorun is a script which automatically runs, logs, and reboots the game for
|
||||||
|
long-term runs. You should run autorun in the background by typing
|
||||||
|
``./autorun &'' -- the MUD will start running in the background and you'll
|
||||||
|
get the normal UNIX prompt back immediately (see section 4.3). The game will
|
||||||
|
then run unattended until you explicitly shut it down.
|
||||||
|
|
||||||
|
On some systems, you may need to prepend ``nohup'' to the autorun command
|
||||||
|
since some systems will kill off any processes left running when you leave
|
||||||
|
the shell.
|
||||||
|
|
||||||
|
4.2. I typed ``bin/circle'' and got lots of boot messages, but then it said
|
||||||
|
``Entering game loop'' and froze.
|
||||||
|
|
||||||
|
It is not frozen, it is just waiting for people to connect. You have to run
|
||||||
|
the MUD in the background by typing ``autorun &'' and then use telnet to
|
||||||
|
connect to the game (see next section).
|
||||||
|
|
||||||
|
4.3. Okay, I think the MUD is running but why don't I get a login prompt?
|
||||||
|
|
||||||
|
In order to play the MUD, you must connect to it using the telnet command,
|
||||||
|
i.e. ``telnet localhost 4000''.
|
||||||
|
|
||||||
|
4.4. How come I get this error when running my mud: ``Error reading board:
|
||||||
|
No such file or directory''
|
||||||
|
|
||||||
|
This is not a bad thing, all it means is that you have some boards on the
|
||||||
|
mud and that it can't find the file for them. Since it can't find the file,
|
||||||
|
the mud will just create the file on the fly and use that, so the next time
|
||||||
|
something is posted to the board, the files will exist. However, if you did
|
||||||
|
have files for the boards and you are suddenly getting this error, it means
|
||||||
|
that the board files have been deleted or something similar.
|
||||||
|
|
||||||
|
4.5. I just got this SIGPIPE, what is it and what Can I Do About It?
|
||||||
|
|
||||||
|
Often it appears that other people send your system SIGPIPEs when their
|
||||||
|
connection is closed, in fact, it is not the person sending the SIGPIPE, it
|
||||||
|
is your system. The SIGPIPE is generated when your program attempts to
|
||||||
|
write to descriptor which has no one listening to it. This occurs if the
|
||||||
|
character is sent a message by the mud after connecting, but before the
|
||||||
|
socket is flagged with an exception or reads 0 bytes. By default, tbaMUD
|
||||||
|
ignores these SIGPIPEs, with the line my_signal(SIGPIPE, SIG_IGN) in
|
||||||
|
signal_setup(). Where most people see the problems with SIGPIPE is while
|
||||||
|
debugging with GDB. By default, GDB responds to a SIGPIPE by stoping the
|
||||||
|
program, printing that a SIGPIPE was received, and passing it to the
|
||||||
|
program. You can change the action taken by GDB by using the `handle'
|
||||||
|
command. To stop the program from stoping at SIGPIPE, you would give GDB the
|
||||||
|
command `handle SIGPIPE nostop'
|
||||||
|
|
||||||
|
4.6. When I run tbaMUD under Linux, it tells me ``gethostbyaddr: con-
|
||||||
|
nection refused'' when the MUD boots, and then dies. Why?
|
||||||
|
|
||||||
|
You need to make sure you have Networking and TCP/IP support compiled into
|
||||||
|
your Linux kernel, even if you aren't actually connected to the Internet.
|
||||||
|
The easiest way to do this if you're using Slackware is to install one of
|
||||||
|
Slackware's precompiled networking kernels. Also, make sure to install
|
||||||
|
Slackware's `N' series of disks which contains other networking support
|
||||||
|
files.
|
||||||
|
|
||||||
|
If Slackware's precompiled kernel isn't available you'll have to compile the
|
||||||
|
kernel yourself. First make sure the kernel source is installed in
|
||||||
|
/usr/src/linux (see section 3.1.4) and follow the instructions in
|
||||||
|
/usr/src/linux/README. When you do `make config' it will ask you a series of
|
||||||
|
questions about which kernel features you want; make sure to answer ``Y'' to
|
||||||
|
``Networking support'' and ``TCP/IP support''.
|
||||||
|
|
||||||
|
4.7. When I run tbaMUD under Windows, it tells me ``Winsock error
|
||||||
|
#10047'' when the MUD boots, and then dies. Why?
|
||||||
|
|
||||||
|
You need to configure TCP/IP networking from the Network Control Panel, even
|
||||||
|
if you are not connected to the Internet. From the Network Control Panel,
|
||||||
|
select ``Add Protocol'', and under the vendor ``Microsoft'', choose
|
||||||
|
``TCP/IP''. It may ask you to insert the Windows CDROM in order to copy
|
||||||
|
the drivers onto your hard drive.
|
||||||
|
|
||||||
|
4.8. When I run tbaMUD under Windows, players can't rent---their
|
||||||
|
equipment is just dropped on the ground, syslogs don't work, so what
|
||||||
|
is the problem?
|
||||||
|
|
||||||
|
The reason that objects aren't saved when your players quit is that certain
|
||||||
|
unzip programs are buggy and don't completely recreate the MUD's directory
|
||||||
|
structure (in particular, it doesn't create directories which have no files
|
||||||
|
in them.) This is fixed in Circle 3.0 patchlevel 12 and above. Before
|
||||||
|
patchlevel 12, you can fix it simply by manually creating the needed
|
||||||
|
directories:
|
||||||
|
|
||||||
|
CD \tbamud
|
||||||
|
cd lib\plrobjs
|
||||||
|
mkdir A-E
|
||||||
|
mkdir F-J
|
||||||
|
mkdir K-O
|
||||||
|
mkdir P-T
|
||||||
|
mkdir U-Z
|
||||||
|
mkdir ZZZ
|
||||||
|
|
||||||
|
Object saving should then work. The syslogs are a different story; no data
|
||||||
|
is written to the system logs because the code currently is configured
|
||||||
|
simply to write all errors to the standard error file descriptor (stderr),
|
||||||
|
and Windows doesn't seem to let you redirect stderr to a file the same way
|
||||||
|
UNIX does. pl12 allows you to direct logs to a specific file instead.
|
||||||
|
|
||||||
|
4.9. When someone logs on to my Windows MUD, the console screen
|
||||||
|
gives: ``gethostbyaddr: No such file or directory''
|
||||||
|
|
||||||
|
This means the MUD can't resolve the IP address of the connecting player's
|
||||||
|
source site innto a hostname. You probably don't have DNS correctly
|
||||||
|
configured in the Windows Network Control Panel menu (under configuration of
|
||||||
|
the TCP protocol). Make sure you have the IP address of your ISP's DNS
|
||||||
|
server listed.
|
||||||
|
|
||||||
|
4.10. My MUD crashed and my connection got closed. What can I do?
|
||||||
|
|
||||||
|
Just because your connection got closed from the MUD (for example, if you
|
||||||
|
get too much information sent to you and the telnet session gets closed),
|
||||||
|
this doesn't always mean that the game itself crashed. Before reporting
|
||||||
|
something as a crash bug, make sure that the game itself crashed, and above
|
||||||
|
all, try to duplicate the circumstances before reporting it as a crash bug.
|
||||||
|
You can also try using gdb to find out why the MUD is crashing if it gives
|
||||||
|
you a core dump.
|
||||||
|
|
||||||
|
4.11. Ok, so how do I use ``gdb''?
|
||||||
|
4.12. How can I hunt bugs more effectively?
|
||||||
|
|
||||||
|
See debugginge.txt
|
||||||
|
|
||||||
|
4.13. I just added n levels to my MUD (from the stock 34). How do I set my
|
||||||
|
imps up to level n without a pfile wipe?
|
||||||
|
|
||||||
|
This should no longer be a problem with the do_cheat function in act.wizard.c
|
||||||
|
but the only ID with access by default is IDNUM 1.
|
||||||
|
|
||||||
|
4.14. I decided to wipe my pfile away anyway. What steps should I take to
|
||||||
|
do this?
|
||||||
|
|
||||||
|
tbaMUD has ASCII pfiles so all you have to do is delete the index and all
|
||||||
|
pfiles in the /lib/plrfiles/ directory.
|
||||||
|
|
||||||
|
You should also remove files in plrobjs, plralias, and plrvars, unless you want
|
||||||
|
the recreated characters to come back with their same equipment, aliases, and
|
||||||
|
trigger variables.
|
||||||
|
|
||||||
|
4.15. I want to expand the ability to pk in my MUD, allowing ASSASSINS
|
||||||
|
that'll be able to PK without getting flagged. How can I do this?
|
||||||
|
|
||||||
|
With tbaMUD simply enter Cedit (configuration editor) and select Game Play
|
||||||
|
Options. Then enable Player Killing.
|
||||||
|
|
||||||
|
4.16. Why does it say ``Connection closed by foreign host.'' and not
|
||||||
|
display the ``Byebye!'' message I'm trying to send before cutting
|
||||||
|
someone off?
|
||||||
|
|
||||||
|
This usually happens if you are doing something like this:
|
||||||
|
|
||||||
|
send_to_char(ch, "Bye bye. Come back soon, ya hear?");
|
||||||
|
close_socket(ch->desc);
|
||||||
|
|
||||||
|
The close_socket immediately dispatches/closes the connection, while
|
||||||
|
send_to_char puts the message on the output queue to be dispatched next
|
||||||
|
game_loop cycle. Therefore, the socket is gone. On some systems (ie old
|
||||||
|
linux), this can even cause a infinite loop attempting to write to a closed
|
||||||
|
socket. The proper way of doing this and other ``Byebye'' messages is to set
|
||||||
|
the CON state of the player to CLOSE, like this:
|
||||||
|
|
||||||
|
send_to_char(ch, "Bye bye. Come back soon, ya hear?");
|
||||||
|
STATE(ch->desc) = CON_CLOSED;
|
||||||
|
|
||||||
|
This will then cycle to the next game_loop, dispatch the output queues
|
||||||
|
(therefore sending the byebye message) and then close the socket. Further
|
||||||
|
note, in some bizarre cases, this only seems to send about 40 characters and
|
||||||
|
no escape codes. Sending more than 40 characters or escape codes (like the
|
||||||
|
clear screen sequence) will crash the process reporting a problem similar to
|
||||||
|
writing to a closed socket.
|
||||||
|
|
||||||
|
4.17. How do I get the tbaMUD to autoload when the Linux server is
|
||||||
|
restarted?
|
||||||
|
|
||||||
|
In /etc/rc.d/rc.local find where things like sendmail and (maybe) gpm
|
||||||
|
are started. Add something like:
|
||||||
|
|
||||||
|
cd /home/mudlogin/tbamud/
|
||||||
|
su mudlogin -c ./autorun &
|
||||||
|
cd
|
||||||
|
|
||||||
|
Of course, change the "mudlogin" to whatever the name of the account is that
|
||||||
|
normally has control of the MUD, and change the path in the first cd to
|
||||||
|
whereever the MUD is run from.
|
||||||
|
|
||||||
|
For more info: man su
|
||||||
|
|
||||||
|
4.18. My server shuts down my MUD everytime I logoff. How do I keep the MUD
|
||||||
|
running when I logoff?
|
||||||
|
|
||||||
|
Instead of typing "autorun &" to start the autorun script (which starts and
|
||||||
|
keeps the MUD running), type "nohup autorun &". Running the autorun via
|
||||||
|
nohup will keep the script and the MUD running when you logoff of the
|
||||||
|
server. For more information type "man nohup" at the prompt on your server.
|
||||||
|
|
||||||
|
5. tbaMUD 3.X
|
||||||
|
|
||||||
|
5.1. Why does tbaMUD use BUF switches all through the code, what's
|
||||||
|
happening here?
|
||||||
|
|
||||||
|
From Jeremy:
|
||||||
|
|
||||||
|
This code is the new output buffering system that I wrote for Circle in the
|
||||||
|
early (non-released) beta versions of 3.0. The old Diku code for queueing
|
||||||
|
output (which stayed with Circle until version 2.20) was memory- and
|
||||||
|
time-inefficient in many cases (and, in my opinion, was inefficient for the
|
||||||
|
normal behavior of most MUDs).
|
||||||
|
|
||||||
|
First, I should explain what output queueing is and why it is necessary. On
|
||||||
|
each pass through the game_loop(), the MUD performs a number of steps: check
|
||||||
|
to see if there are any new players connecting, kick out people with bad
|
||||||
|
links, read input over the network for all players, then process the input
|
||||||
|
for each player that has sent a complete line over the net. The processing
|
||||||
|
step is usually where output is generated because it is where MUD commands
|
||||||
|
are processed (e.g., ``kill'' might generate output of ``Kill who?'') When
|
||||||
|
output is generated, it is not immediately sent out to the player, but
|
||||||
|
instead queued for output in a buffer. After all players' commands are
|
||||||
|
processed (and each command generates the appropriate output for various
|
||||||
|
players), the next step of the game_loop() is to send all the queued output
|
||||||
|
out over the network.
|
||||||
|
|
||||||
|
The new output system that tba now uses allocates a small, fixed size
|
||||||
|
buffer (1024 bytes) for each descriptor in which output can be queued. When
|
||||||
|
output is generated (via such functions as send_to_char(), act(), etc.), it
|
||||||
|
is written to the fixed size buffer until the buffer fills. When the buffer
|
||||||
|
fills, we switch over to a larger (12K) buffer instead. A ``buffer
|
||||||
|
switch'', therefore, is when the 1024-byte fixed buffer overflows.
|
||||||
|
|
||||||
|
When a large (12K) buffer is needed, it is taken from a pool of 12K buffers
|
||||||
|
that already been created. It is used for the duration of that pass through
|
||||||
|
the game_loop() and then returned to the pool immediately afterwards, when
|
||||||
|
the output is sent to the descriptor. If a large buffer is needed but none
|
||||||
|
are in the pool, one is created (thereby increasing the size of the pool);
|
||||||
|
the ``buf_largecount'' variable records the current pool size.
|
||||||
|
|
||||||
|
If a player has already gone from their small to large buffer, and so much
|
||||||
|
output is generated that it fills even the large buffer, the descriptor is
|
||||||
|
changed to the overflow state, meaning that all future output for the
|
||||||
|
duration of the current pass through the game loop is discarded. This is a
|
||||||
|
buffer overflow, and the only state in which output is lost.
|
||||||
|
|
||||||
|
Now that I've described how the system works, I'll describe the rationale.
|
||||||
|
The main purpose for the two-tiered buffer system is to save memory and
|
||||||
|
reduce CPU usage. From a memory standpoint: Allocating a fixed 12K buffer
|
||||||
|
for each socket is a simple scheme (and very easy to code), but on a large
|
||||||
|
MUD, 100 12K buffers can add up to a lot of wasted memory. (1.2 megs of
|
||||||
|
memory used for buffering on a 100-player MUD may not seem like very much,
|
||||||
|
but keep in mind that one of tba's big selling points several years ago,
|
||||||
|
when memory was expensive, was that it had a very small memory footprint (3
|
||||||
|
or 4 megs total!) And from a CPU standpoint: the original Diku used a
|
||||||
|
dynamically allocated buffer scheme to queue output, which unfortunately
|
||||||
|
meant that for each player, on each pass through the game loop, dozens of
|
||||||
|
tiny buffers (often one for every line of output, depending on the code to
|
||||||
|
execute the command) were allocated with malloc(), individually written to
|
||||||
|
the system using individual calls to write(), and then free()'d. My system
|
||||||
|
saves hundreds or thousands of calls per second to malloc() and free(), and
|
||||||
|
reduces the number of system calls *drastically* (to at most one per player
|
||||||
|
per pass through the game loop).
|
||||||
|
|
||||||
|
The trick is to choose the size of the small and large buffers correctly in
|
||||||
|
order to find the optimal behavior. I consider ``optimal'' to mean that 90%
|
||||||
|
of the time, most players stay within the limits of their small buffer (for
|
||||||
|
example, when wandering through town or mindlessly killing some monster
|
||||||
|
while watching damage messages go by). Hopefully, a large buffer switch is
|
||||||
|
only necessary when a player executes a special command that generates an
|
||||||
|
unusually large amount of output, such as ``who'', ``read board'', or
|
||||||
|
``where sword''. This critically depends on the fact that not everyone will
|
||||||
|
be executing such a special large-output command at the same instant.
|
||||||
|
|
||||||
|
For example, imagine you have 10 players on your MUD. They are all
|
||||||
|
wandering around town, and every once in a while one of them types ``who'',
|
||||||
|
or reads the board, meaning that they are seeing more than 1024 bytes of
|
||||||
|
output at a time. On such a MUD, I would hope that there would only be a
|
||||||
|
single 12K buffer allocated which gets passed around among all the 10
|
||||||
|
players as needed. Now, all players think they can queue up to 12K of
|
||||||
|
output per command without getting truncated even though only one 12K buffer
|
||||||
|
actually exists -- they are all sharing it.
|
||||||
|
|
||||||
|
But - there's a problem with this. There are certain cases when many
|
||||||
|
players have to see a lot of output at the same instant (i.e. on the same
|
||||||
|
pass through the game_loop()), all of them will need a large buffer at the
|
||||||
|
same time and the pool will get very big. For example, if an evil god types
|
||||||
|
``force all who''; or if the MUD lags for several seconds, then suddenly
|
||||||
|
gets unlagged causing many commands to be processed at the same moment; or
|
||||||
|
if 20 people are all trying to kill the same MOB and are all seeing 20
|
||||||
|
damage messages (more than 1024 bytes) on the same pass through the
|
||||||
|
game_loop().
|
||||||
|
|
||||||
|
Unfortunately, the current patchlevel of tba has no way to destroy large
|
||||||
|
buffers so such cases are pathological and cause wasted memory.
|
||||||
|
Unfortunately since I don't run a MUD I can't actually tell how often this
|
||||||
|
happens on a real MUD. (If there are any IMPs out there who run large MUDs
|
||||||
|
(say, >= 30-50 players on regularly), and you've read this far, please send
|
||||||
|
me the output of ``show stats'' after your MUD has been played for at least
|
||||||
|
several hours.)
|
||||||
|
|
||||||
|
5.2 How do I add a new class? How do I add more levels? etc?
|
||||||
|
|
||||||
|
Many common questions about basic additions are answered here:
|
||||||
|
http://tbamud.com
|
|
@ -1,38 +1,71 @@
|
||||||
Updated: Apr 2007
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
Compiling tbaMUD
|
Compiling tbaMUD
|
||||||
under Microsoft Windows using CygWin
|
under Microsoft Windows using CygWin
|
||||||
|
Originally by: Jeremy Elson, David Goldstein, Tony Robbins, and George Greer.
|
||||||
|
|
||||||
tbaMUD compiles under Cygwin without needing any special modifications.
|
tbaMUD compiles under Cygwin without needing any special modifications.
|
||||||
This free pseudo-Unix environment for Windows includes the "bash" shell, "gcc"
|
This free pseudo-Unix environment for Windows includes the "bash" shell, gcc,
|
||||||
family of compilers, and a full set of programs and libraries for Windows users
|
and a full set of programs and libraries for Windows users to compile and run
|
||||||
to compile and run programs from source code intended for Unix. It can be
|
programs from source code intended for Unix. It can be downloaded from:
|
||||||
downloaded from: http://cygwin.com/
|
http://cygwin.com/
|
||||||
|
|
||||||
Compiling tbaMUD under Cygwin is basically the same as it would be under
|
Compiling tbaMUD under Cygwin is basically the same as it would be under
|
||||||
another form of Unix:
|
another form of Unix:
|
||||||
|
|
||||||
1) Download from: http://cygwin.com/setup.exe
|
1) Download from: http://cygwin.com/setup.exe
|
||||||
Select open.
|
Select open.
|
||||||
Install from Internet
|
Install from Internet.
|
||||||
Select "just me" "dos"
|
Choose a root directory, I use C:\
|
||||||
Choose a mirror site.
|
Select "just me" "Unix / binary"
|
||||||
Leave selected package as default.
|
Select a local package directory, I use C:\WINDOWS\Temp
|
||||||
Select the following from devel: autoconf, gcc, make, and patchutils
|
Leave Direct Connection selected.
|
||||||
Click Next.
|
Choose a download site.
|
||||||
Install, follow prompts.
|
You can either click the "circular arrow" next to All to install the whole
|
||||||
|
thing (it lags a bit, wait for it) or leave default and add the necessary
|
||||||
|
packages yourself by expanding devel and adding: autoconf, gcc, make, and
|
||||||
|
patchutils (choose the first one of each). The all option requires
|
||||||
|
broadband and at least an hour to download. It will automatically install
|
||||||
|
once complete, just follow the prompts.
|
||||||
|
|
||||||
2) Download and uncompress the latest version of tbaMUD:
|
2) Download the latest version of tbaMUD from http://tbamud.com
|
||||||
http://cwg.lazuras.org/modules.php?name=Downloads&d_op=viewdownload&cid=16
|
Create an account on tbamud.com as it will be a great resource for any
|
||||||
Join the forums as they will be a great resource for any problems that you
|
problems that you encounter. Once you download and uncompress tbaMUD (I use
|
||||||
encounter. Once you download and uncompress tbaMUD (I use winRAR) read
|
winRAR) read through the /doc directory.
|
||||||
through the /doc directory.
|
|
||||||
|
|
||||||
3) Start the Cygwin "bash" shell by double clicking the Cygwin Icon. This will
|
3) Start the Cygwin "bash" shell by double clicking the Cygwin Icon. This will
|
||||||
open a telnet looking window that mimics a *nix server where you can run the
|
open a telnet looking window that mimics a *nix server where you can run the
|
||||||
MUD. Go to the directory where you extracted tbaMUD by using the "cd" change
|
MUD. Go to the directory where you extracted tbaMUD by using the "cd" change
|
||||||
directory command and "dir" directory listing to find the correct files. For
|
directory command and "dir" directory listing to find the correct files. For
|
||||||
example "C:\tbaMUD". "cd c:/tbaMUD" "dir" in the listed files you should see
|
example "C:\tbaMUD". "cd c:/tbaMUD" then "dir" to list the files. You should
|
||||||
one called configure. DO NOT go into the SRC directory yet.
|
see one called configure. DO NOT go into the SRC directory yet.
|
||||||
|
|
||||||
|
4) Run the configure script by typing "./configure". This will automatically
|
||||||
|
detect what programs and library functions are available, and create the
|
||||||
|
files "Makefile" and "conf.h" based on the results.
|
||||||
|
|
||||||
|
If you get complaints from bash that it will not run the configure script
|
||||||
|
either because it cannot find it or because it claims the file is not
|
||||||
|
an executable, you can also try "sh configure", "sh ./configure",
|
||||||
|
"bash configure" and "bash ./configure" until one of them works.
|
||||||
|
|
||||||
|
5) NOW change to the /tbaMUD/src directory "cd src", and type "make", and watch
|
||||||
|
tbaMUD and the additional utilities included in the tbaMUD distribution
|
||||||
|
automatically being compiled and placed in /tbaMUD/bin.
|
||||||
|
|
||||||
|
6) Go back to /tbaMUD, and run the MUD either directly by typing "bin/circle",
|
||||||
|
or by using the "./autorun &" script. The & makes it run in the background.
|
||||||
|
|
||||||
|
7) Start a telnet program. Open a connection to your own machine "localhost"
|
||||||
|
on port 4000. You should see the MUD's login screen welcoming you. The
|
||||||
|
first person to login will be promoted to IMP.
|
||||||
|
|
||||||
|
If you have problems, read this document again. Most questions are answered in
|
||||||
|
the documentation or at http://tbamud.com. If you are still having problems
|
||||||
|
feel free to stop by The Builder Academy for assistance.
|
||||||
|
|
||||||
|
It really can not be stressed enough: READ EVERYTHING.
|
||||||
|
|
||||||
OPTIONAL: Make the following change to src/Makefile.in to make copyover work:
|
OPTIONAL: Make the following change to src/Makefile.in to make copyover work:
|
||||||
|
|
||||||
|
@ -49,41 +82,7 @@ OPTIONAL: Make the following change to src/Makefile.in to make copyover work:
|
||||||
clean:
|
clean:
|
||||||
|
|
||||||
The above is a "patch" file. All you need to do is add the two lines with
|
The above is a "patch" file. All you need to do is add the two lines with
|
||||||
the +'s to your file Makefile.in. If you are still confused check out these
|
the +'s to your file Makefile.in (but delete the +'s). If you are still
|
||||||
links on how to patch: http://www.circlemud.org/cdp/wtfaq/handpatch.html
|
confused check out these links on how to patch:
|
||||||
|
http://www.circlemud.org/cdp/wtfaq/handpatch.html
|
||||||
http://cwg.lazuras.org/modules.php?name=Forums&file=viewtopic&t=757
|
http://cwg.lazuras.org/modules.php?name=Forums&file=viewtopic&t=757
|
||||||
|
|
||||||
4) Run the configure script by typing "./configure". This will automatically
|
|
||||||
detect what programs and library functions are available, and create the
|
|
||||||
files "Makefile" and "conf.h" based on the results.
|
|
||||||
|
|
||||||
If you get complaints from bash that it will not run the configure script
|
|
||||||
either because it cannot find it or because it claims the file is not
|
|
||||||
an executable, you can also try "sh configure", "sh ./configure",
|
|
||||||
"bash configure" and "bash ./configure" until one of them works.
|
|
||||||
|
|
||||||
5) NOW change to the /tbaMUD/src directory "cd src", and type "make", and watch
|
|
||||||
tbaMUD and the additional utilities included in the tbaMUD distribution
|
|
||||||
automatically being compiled and placed in /tbaMUD/bin.
|
|
||||||
|
|
||||||
6) Go back to /tbaMUD, and run the MUD either directly by typing
|
|
||||||
"bin/tbaMUD", or by using the "./autorun &" script.
|
|
||||||
|
|
||||||
7) Start a telnet program. Open a connection to your own machine "localhost"
|
|
||||||
on port 4000. You should see the MUD's login screen welcoming you. The
|
|
||||||
first person to login will be promoted to IMP.
|
|
||||||
|
|
||||||
If you have problems, read this document again. Most of the questions received
|
|
||||||
in email or which are posted to USENET newsgroups are answered in this file, or
|
|
||||||
in other documents included in the tbaMUD distribution. If you are still
|
|
||||||
having problems and you're *sure* that your question is not answered in this
|
|
||||||
document or in one of the others files in the /tbaMUD/doc directory, try
|
|
||||||
reading the forums at http://cwg.lazuras.org/ or stop by TBA for assistance.
|
|
||||||
|
|
||||||
It really can not be stressed enough: READ EVERYTHING.
|
|
||||||
|
|
||||||
Authors: Jeremy Elson, David Goldstein, Tony Robbins, and George Greer.
|
|
||||||
|
|
||||||
Rumble
|
|
||||||
The Builder Academy
|
|
||||||
builderacademy.net 9091
|
|
||||||
|
|
BIN
doc/act.pdf
BIN
doc/act.pdf
Binary file not shown.
184
doc/act.txt
Normal file
184
doc/act.txt
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
The act() Function
|
||||||
|
Originally by Alex Fletcher. Based on text from the DikuMud authors
|
||||||
|
|
||||||
|
This document is intended to give an overview of the act()function and give a
|
||||||
|
summary of the various flags and the associated descriptive control characters.
|
||||||
|
The act() function is one of the primary functions for sending a message from
|
||||||
|
the game to a character or number of characters in a room.
|
||||||
|
|
||||||
|
Contents
|
||||||
|
|
||||||
|
1 The act()Function
|
||||||
|
|
||||||
|
1.1 Overview
|
||||||
|
1.2 The Function
|
||||||
|
1.3 TheParameters
|
||||||
|
1.4 Control Characters
|
||||||
|
1.5 Examples
|
||||||
|
|
||||||
|
1 The act()Function
|
||||||
|
|
||||||
|
1.1 Overview
|
||||||
|
The act() function is used to process and send strings of text to characters
|
||||||
|
in a room. It can be used to send the same basic string to a number of
|
||||||
|
characters filling in certain segments – designated by control characters –
|
||||||
|
in different ways, dependant on what each character can see and who each
|
||||||
|
character is. Once the text string passed to the function has been parsed, it
|
||||||
|
is capitalized and a newline is added to its tail.
|
||||||
|
|
||||||
|
1.2 The Function
|
||||||
|
The act()function is found in the comm.c source file and is described as:
|
||||||
|
|
||||||
|
void act(const char *str, int hide_invisible, struct char_data *ch,
|
||||||
|
struct obj_data *obj, const void *vict_obj, int type)
|
||||||
|
|
||||||
|
These pieces are used as follows:
|
||||||
|
|
||||||
|
str: This is the basic string, a null terminated character array, including
|
||||||
|
control characters (see section 1.4 on ‘Control Characters’), to be sent to
|
||||||
|
characters designated by the targets.
|
||||||
|
|
||||||
|
hide_invisible: A TRUE or FALSE value indicating whether or not to hide the
|
||||||
|
entire output from any characters that cannot see the “performing character”.
|
||||||
|
|
||||||
|
ch: The “performing character”. This is the character that the output string
|
||||||
|
is associated with. The character is used to determine the room for the output
|
||||||
|
of the action in question.
|
||||||
|
|
||||||
|
obj: An object (an actual item – obj_data) used in the course of the action.
|
||||||
|
|
||||||
|
vict_obj: This can be either a character involved in the action, another
|
||||||
|
object, or even a predefined string of text.
|
||||||
|
|
||||||
|
type: One of TO_VICT, TO_CHAR, TO_NOTVICT, or TO_ROOM. This indicates who it
|
||||||
|
is to be targeted at.
|
||||||
|
|
||||||
|
1.3 The Parameters
|
||||||
|
Of the various parameters passed to the act() function, the str is the most
|
||||||
|
important, as it is the basis for the actual final output. If this parameter
|
||||||
|
is a null-pointer or points to a null-character, then the function returns
|
||||||
|
immediately. The next important parameter is the ch parameter. This, as
|
||||||
|
mentioned, points to the central character associated with the output string
|
||||||
|
and action.
|
||||||
|
|
||||||
|
obj is an object of type struct obj_data *that is passed to the function. If
|
||||||
|
there is no object to pass to the function, then a NULL or 0 should be passed
|
||||||
|
in this location.
|
||||||
|
|
||||||
|
The next parameter vict_objcan be a number of things ranging from a game object
|
||||||
|
(strcut obj_data *), through to a character (struct char_data *), and even a
|
||||||
|
null terminated character array (char *).
|
||||||
|
|
||||||
|
Do note, however, that obj and vict_obj are both ignored if there is no control
|
||||||
|
character reference (see section 1.4 ‘Control Characters’) to them and the type
|
||||||
|
is set to TO_ROOM or TO_CHAR. In these cases, NULL should be supplied as the
|
||||||
|
input to the function.
|
||||||
|
|
||||||
|
The hide_invisible flag dictates whether or not the action output should be
|
||||||
|
hidden from characters that cannot see ch. If the flag is set to TRUE
|
||||||
|
(non-zero), then this is the case.
|
||||||
|
|
||||||
|
The type determines who the output is to be sent to. There are four options for
|
||||||
|
this (all defined in comm.h) described below:
|
||||||
|
|
||||||
|
TO_ROOM: This sends the output to everybody in the room, except ch.
|
||||||
|
|
||||||
|
TO_VICT: This option sends the output to the character pointed to by vict_obj.
|
||||||
|
In this case, vict_obj must point at a character rather than an object.
|
||||||
|
|
||||||
|
TO_NOTVICT: In another case where vict_obj must point to a character. This
|
||||||
|
sends the output to everybody in the room except ch and vict_obj.
|
||||||
|
|
||||||
|
TO_CHAR: Finally, this option sends the output to the ch.
|
||||||
|
|
||||||
|
TO_SLEEP: This is a special option that must be combined with one of the above
|
||||||
|
options. It tells act() that the output is to be sent even to characters that
|
||||||
|
are sleeping. It is combined with a bitwise ‘or’. i.e. TO_VICT | TO_SLEEP.
|
||||||
|
|
||||||
|
When the string has been parsed, it is capitalized and a newline is added.
|
||||||
|
|
||||||
|
1.4 Control Characters
|
||||||
|
In a manner similar to the printf() family of functions, act() uses control
|
||||||
|
characters. However, instead of using the % symbol, act() uses the $ character
|
||||||
|
to indicate control characters.
|
||||||
|
|
||||||
|
$n Write name, short description, or “someone”, for ch, depending on whether
|
||||||
|
ch is a PC, a NPC, or an invisible PC/NPC.
|
||||||
|
$N Like $n, except insert the text for vict_obj.*
|
||||||
|
$m “him,” “her,” or “it,” depending on the gender of ch.
|
||||||
|
$M Like $m, for vict_obj.*
|
||||||
|
$s “his,” “her,”or “it,” depending on the gender of ch.
|
||||||
|
$S Like $s, for vict_obj.*
|
||||||
|
$e “he,” “she,” “it,” depending on the gender of ch.
|
||||||
|
$E Like $e, for vict_obj.*
|
||||||
|
$o Name or “something” for obj, depending on visibility.
|
||||||
|
$O Like $o, for vict_obj.*
|
||||||
|
$p Short description or “something” for obj.
|
||||||
|
$P Like $p for vict_obj.*
|
||||||
|
$a “an” or“a”, depending on the first character of obj’s name.
|
||||||
|
$A Like $a, for vict_obj.*
|
||||||
|
$T Prints the string pointed to by vict_obj.*
|
||||||
|
$F Processes the string pointed to by vict_obj with the fname() function prior
|
||||||
|
to printing.*
|
||||||
|
$u Processes the buffer and uppercases the first letter of the previous word
|
||||||
|
(the word immediately prior to the control code). If there is no previous word,
|
||||||
|
no action is taken.
|
||||||
|
$U Processes the buffer and uppercases the first letter of the following word
|
||||||
|
(the word immediately after to the control code). If there is no following
|
||||||
|
word, no action is taken.
|
||||||
|
$$ Print the character ‘$’.
|
||||||
|
|
||||||
|
NOTE*: vict_obj must be a pointer of type struct char_data *.
|
||||||
|
|
||||||
|
1.5 Examples
|
||||||
|
In all of the following examples, ch points to male character Ras, vict always
|
||||||
|
points to the female character Anna. obj1 is a small sword, and obj2 is a small
|
||||||
|
sack.
|
||||||
|
|
||||||
|
act("$n smiles happily.", TRUE, ch, NULL, NULL, TO_ROOM);
|
||||||
|
This is sent to the room that Ras is currently in, and the string that they see
|
||||||
|
if they can see him is:
|
||||||
|
Ras smiles happily.
|
||||||
|
If a character cannot see Ras, then they will not see the action at all.
|
||||||
|
|
||||||
|
act("You kiss $M.", FALSE, ch, NULL, vict, TO_CHAR);
|
||||||
|
In this action, Ras is kissing Anna, and Ras will see:
|
||||||
|
You kiss her.
|
||||||
|
|
||||||
|
act("$n gives $p to $N.", TRUE, ch, obj1, vict, TO_NOTVICT);
|
||||||
|
The output from this string is sent to everyone in the room except for Ras and
|
||||||
|
Anna. Of course, if they cannot see Ras, then they will not see any output at
|
||||||
|
all. The string that each character in the room will see is:
|
||||||
|
Ras gives a small sword to Anna.
|
||||||
|
If a character cannot see Anna, then someone will be used in place of her name,
|
||||||
|
and if they cannot see the small sword, then something will be used in its
|
||||||
|
place.
|
||||||
|
|
||||||
|
act("$n gives you $p.", FALSE, ch, obj1, vict, TO_VICT);
|
||||||
|
Similar to the prior example, this is the output for Anna. She will see this
|
||||||
|
even if she cannot see Ras, and the output that she will get is:
|
||||||
|
Ras gives you a small sword.
|
||||||
|
Just as per the last example, if she cannot see Ras, someone will be used in
|
||||||
|
place of his name, and if she cannot see the sword, then something will be
|
||||||
|
used in its place.
|
||||||
|
|
||||||
|
act("$n puts $p in $s $O.", TRUE, ch, obj1, obj2, TO_ROOM);
|
||||||
|
This action uses two objects rather than two characters, and is displayed to
|
||||||
|
the entire room (with the exception of Ras of course). If the character can
|
||||||
|
see Ras, they will see:
|
||||||
|
Ras puts a small sword in his small sack.
|
||||||
|
Otherwise, they will see nothing. Again, as per the prior two examples,
|
||||||
|
something will be used in place of any objects that the viewing character
|
||||||
|
cannot see.
|
||||||
|
|
||||||
|
act("The $F opens quietly.", FALSE, ch, NULL, EXIT(ch, door)->keyword, TO_ROOM);
|
||||||
|
If the keywords for the door were gate wooden, then this would send the output
|
||||||
|
string of:
|
||||||
|
The gate opens quietly.
|
||||||
|
to all of the characters in the room with the exception of Ras.
|
||||||
|
|
||||||
|
In addition to these examples, a multitude of other examples can be found
|
||||||
|
scattered throughout the tbaMUD source code.
|
BIN
doc/admin.pdf
BIN
doc/admin.pdf
Binary file not shown.
592
doc/admin.txt
Normal file
592
doc/admin.txt
Normal file
|
@ -0,0 +1,592 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
The tbaMUD Administrator’s Manual
|
||||||
|
Originally by Jeremy Elson
|
||||||
|
|
||||||
|
This document describes how to configure tbaMUD and how to compile it for the
|
||||||
|
first time. It also discusses how to run the server including documentation of
|
||||||
|
command-line options, a description of system logs and how to use them, and a
|
||||||
|
description of daily and long-term maintenance required by the MUD. The
|
||||||
|
intended audience is implementors new to tbaMUD or MUD administration in
|
||||||
|
general.
|
||||||
|
|
||||||
|
More information about tbaMUD, can be found at http://tbamud.com.
|
||||||
|
|
||||||
|
Contents
|
||||||
|
|
||||||
|
1 Welcome to tbaMUD!
|
||||||
|
|
||||||
|
1.1 Background and Introduction
|
||||||
|
1.2 Are you a Player or an Administrator?
|
||||||
|
1.3 So, you’re sure you want to run your own MUD?
|
||||||
|
1.4 Giving Credit Where Credit is Due
|
||||||
|
|
||||||
|
2 Getting Started
|
||||||
|
2.1 Section Requirements
|
||||||
|
2.2 Downloading and Unpacking the Source
|
||||||
|
2.3 Configuring tbaMUD
|
||||||
|
2.4 Compiling tbaMUD
|
||||||
|
|
||||||
|
3 Running tbaMUD
|
||||||
|
3.1 Execution and autorun
|
||||||
|
3.2 Command-Line Options
|
||||||
|
3.3 Creating an Implementor Character
|
||||||
|
|
||||||
|
4 Customizing tbaMUD
|
||||||
|
4.1 CEDIT and config.c
|
||||||
|
4.2 TEDIT and Text Files
|
||||||
|
4.3 World Files
|
||||||
|
|
||||||
|
5 System Logs
|
||||||
|
5.1 Player Information
|
||||||
|
5.2 Usage Information
|
||||||
|
5.3 Errors
|
||||||
|
|
||||||
|
6 MUD Maintenance
|
||||||
|
6.1 Technical Maintenance
|
||||||
|
6.2 Diplomatic Maintenance
|
||||||
|
|
||||||
|
7 Final Thoughts
|
||||||
|
|
||||||
|
1 Welcome to tbaMUD!
|
||||||
|
|
||||||
|
1.1 Background and Introduction
|
||||||
|
tbaMUD is a derivative of DikuMud, the Multi-User Dungeon developed at DIKU,
|
||||||
|
the Department of Computer Science at the University of Copenhagen. The original
|
||||||
|
circleMUD, version 1.0, was run by Jeremy Elson at the Johns Hopkins
|
||||||
|
University’s Department of Computer Science with moderate popularity from
|
||||||
|
January until September of 1992. The version 1.0 code, which was never released
|
||||||
|
to the public, was archived and remained inactive for several months after the
|
||||||
|
death of the original CircleMUD. In the summer of 1993, it was taken out of
|
||||||
|
storage and cleaned up with the intention of making it a public code base that
|
||||||
|
anyone could freely download and use to start a MUD. Version 2.0, the first
|
||||||
|
publically available version, was released in June of 1993. CircleMUD was
|
||||||
|
maintained as a public code base until 2002 with the final release of CircleMUD
|
||||||
|
3.1. After development stagnated for 3 years The Builder Academy offered to
|
||||||
|
take over development. After a 4th year of no continued development The Builder
|
||||||
|
Academy released circleMUD 3.5 in 2006. Soon after Jeremy Elson requested we
|
||||||
|
change the codebase name. Even though we still follow the CircleMUD vision we
|
||||||
|
agreed and the codebase is now known as tbaMUD. The Builder Academy is open to
|
||||||
|
anyone willing to learn how to build or start their own MUD.
|
||||||
|
|
||||||
|
Thousands of carefully spent hours have gone into the development of this
|
||||||
|
codebase, but it is not a finished product – it is only a beginning. It has
|
||||||
|
only a small number of spells and skills, and only the 4 original DikuMud
|
||||||
|
classes. From a gamer’s point of view, it pales in comparison to other MUDs
|
||||||
|
which have dozens of spells spread over a dozen classes, and a rich palette of
|
||||||
|
skills. Yet from a programmer’s point of view, tbaMUD is very highly developed.
|
||||||
|
While the look and feel of the original DikuMud has been maintained, most of
|
||||||
|
the underlying code and many of the structures have been optimized, reworked,
|
||||||
|
or completely redesigned to be efficient, compact, and easily changeable and
|
||||||
|
extensible. Dozens of features which have become standard in the MUDding
|
||||||
|
world over the past few years, although they were not part of the original
|
||||||
|
DikuMud release, were added to tbaMUD as well.
|
||||||
|
|
||||||
|
The result is that tbaMUD is a launching pad for your own MUD ideas. Our hope
|
||||||
|
in releasing it is that it will free potential MUD implementors from having to worry about dealing with bug-ridden code or wasting time reinventing the wheel
|
||||||
|
by re-coding standard MUD features, allowing them to devote more effort towards
|
||||||
|
creatively shaping tbaMUD into their own unique vision of how a MUD should look
|
||||||
|
and feel. The reason why tbaMUD has so few specialized spells, skills, classes,
|
||||||
|
and races is to encourage implementors just like you to create your own
|
||||||
|
unique system instead of just another stock MUD that everyone has seen before.
|
||||||
|
|
||||||
|
So, it is with this message that we inflict our code on the world: don’t just
|
||||||
|
put another generic MUD on the Net – give us something new and exciting, and
|
||||||
|
have as much fun as possible in the process!
|
||||||
|
|
||||||
|
1.2 Are you a Player or an Administrator?
|
||||||
|
If you’ve never played a MUD before, jumping right in and trying to run one of
|
||||||
|
your own will probably just get you hopelessly confused. Instead of trying to
|
||||||
|
compile and run the tbaMUD package yourself (which is presumably what you’re
|
||||||
|
trying to do if you’re reading this document), you should play someone else’s
|
||||||
|
copy of tbaMUD first to become familiar with the codebase.
|
||||||
|
|
||||||
|
1.3 So, you’re sure you want to run your own MUD?
|
||||||
|
If you’re already an old hand at playing MUDs and you’ve decided you want to
|
||||||
|
start one of your own, here is our advice: sleep on it, try several other MUDs
|
||||||
|
first. Work your way up to an admin position and see what running a MUD is
|
||||||
|
really about. It is not all fun and games. You actually have to deal with
|
||||||
|
people, you have to babysit the players, and be constantly nagged about things
|
||||||
|
you need to do or change. Running a MUD is extremely time consuming if you do
|
||||||
|
it well, if you are not going to do it well then don't bother. Just playing
|
||||||
|
MUDs is masochistic enough, isn’t it? Or are you trying to shave that extra
|
||||||
|
point off your GPA, jump down that one last notch on your next job evaluation,
|
||||||
|
or get rid of that pesky Significant Other for good? If you think silly
|
||||||
|
distractions like having friends and seeing daylight are preventing you from
|
||||||
|
realizing your full potential in the MUD world, being a MUD Administrator is
|
||||||
|
the job for you.
|
||||||
|
|
||||||
|
Don’t get me wrong: running a production MUD can be great fun. It can also be
|
||||||
|
overburdened by politics and plagued by spiteful players devoted to making your
|
||||||
|
life difficult, and otherwise be a highly frustrating endeavour. That’s why I
|
||||||
|
started The Builder Academy and develop the tbaMUD codebase. The enjoyment of
|
||||||
|
MUDding without the pesky players!
|
||||||
|
|
||||||
|
1.4 Giving Credit Where Credit is Due
|
||||||
|
If I haven’t scared you away yet, and you’re still sure you want to use tbaMUD,
|
||||||
|
please stop for a moment and look at the license in the file license.txt. It
|
||||||
|
outlines the terms under which you must use tbaMUD.
|
||||||
|
|
||||||
|
The license is simple. It boils down to the message, “Don’t rip off other
|
||||||
|
people’s work.” Unfortunately, this simple message ended up becoming somewhat
|
||||||
|
long-winded because I am trying to prevent people from abusing DikuMud in the
|
||||||
|
future as they have in the past.
|
||||||
|
|
||||||
|
Also, out of courtesy if nothing else, please keep the credits file intact. You
|
||||||
|
can add your own credits on top of the existing file, but I’d appreciate it if
|
||||||
|
you would not simply remove it and all references to the word “Circle”
|
||||||
|
everywhere in the MUD. How would you feel if someone took your code and then
|
||||||
|
took credit for it?
|
||||||
|
|
||||||
|
USE OF THIS SOFTWARE IN ANY CAPACITY IMPLIES THAT YOU HAVE READ, UNDERSTOOD,
|
||||||
|
AND AGREED TO ABIDE BY THE TERMS AND CONDITIONS SET DOWN BY THE LICENSE.
|
||||||
|
|
||||||
|
2 Getting Started
|
||||||
|
|
||||||
|
2.1 Section Requirements
|
||||||
|
tbaMUD was originally written as UNIX software and will automatically configure
|
||||||
|
itself (using GNU autoconf) and compile under most versions of UNIX, both BSD
|
||||||
|
and System V derivatives, including Mac OS X. With minor adjustments
|
||||||
|
(documented below), the same source should compile under Microsoft Windows, IBM
|
||||||
|
OS/2, and the Amiga. Users have also reported getting tbaMUD to compile and run
|
||||||
|
under MkLinux, the port of Linux to the Power Macintosh. tbaMUD will not work under DOS, Windows 3.x, Windows for Workgroups 3.x, or Mac System.
|
||||||
|
Specifically, the following variants of UNIX have been tested and are known to
|
||||||
|
work with tbaMUD:
|
||||||
|
|
||||||
|
SunOS 4.1.4
|
||||||
|
Solaris 2.3 and above
|
||||||
|
Irix 5.2, 6.2
|
||||||
|
AIX 3.2
|
||||||
|
Ultrix 4.x
|
||||||
|
HP-UX 9.x
|
||||||
|
Linux 1.x, 2.x
|
||||||
|
BSD/OS 2.1
|
||||||
|
Mac OS X (10.0 and above)
|
||||||
|
|
||||||
|
If your system is not listed, don’t despair; because of the autoconf program,
|
||||||
|
tbaMUD will compile under most versions of UNIX on its own. A large effort was
|
||||||
|
made to make tbaMUD more portable by converting many of its system calls over
|
||||||
|
to POSIX compliance. Converting tbaMUD to POSIX vastly helps portability on
|
||||||
|
modern operating systems, most of which are POSIX-compliant. Unfortunately,
|
||||||
|
on some older systems that are not (such as NextSTEP 2.x), it may be more
|
||||||
|
difficult to compile than it was to compile earlier versions of the code.
|
||||||
|
(POSIX stands for Portable Operating System Interface for UNIX and is an effort
|
||||||
|
to standardize the way UNIX programs talk to the operating system. For more
|
||||||
|
information, see Stevens’ excellent book, Advanced Programming in the UNIX
|
||||||
|
Environment.)
|
||||||
|
|
||||||
|
For a small, private MUD, or a MUD used only for testing and development, about
|
||||||
|
20 MB of disk space and 32 MB of memory should be sufficient. For large, public
|
||||||
|
MUDs with a large player base, 30 to 50MB of disk space and at least 50 MB of
|
||||||
|
memory are recommended. Free memory is much more important than CPU speed;
|
||||||
|
tbaMUD uses virtually no CPU time.
|
||||||
|
|
||||||
|
Historically, tbaMUD has always been developed under different variants of UNIX.
|
||||||
|
The original CircleMUD was run on a DECstation 3100 running Ultrix 4.0, which
|
||||||
|
remained Circle’s development platform until v2.0. Starting with v2.0, Circle
|
||||||
|
was developed under various versions of Linux and Solaris over the years
|
||||||
|
ranging from Linux 0.99.11 through the current Linux 2.2.x and including
|
||||||
|
Solaris x86 5.6.
|
||||||
|
|
||||||
|
2.2 Downloading and Unpacking the Source
|
||||||
|
The first step in setting up tbaMUD is to make sure you have the most recent
|
||||||
|
version of the source. You can always find the most recent version of the
|
||||||
|
source at tbaMUD’s official website http://tbamud.com.
|
||||||
|
|
||||||
|
Next, unpack the archive. If you have the .tar.gz version, unpack it using gzip
|
||||||
|
(GNU unzip) and the tar archiver. If you don’t already have them, both of these
|
||||||
|
utilities can be downloaded from the GNU FTP site <ftp://ftp.gnu.org/pub/gnu/>.
|
||||||
|
To unpack the archive on a UNIX system, type:
|
||||||
|
|
||||||
|
gzip -dc tbaMUD-xxx.tar.gz | tar xvf
|
||||||
|
|
||||||
|
If you downloaded the .zip version, make sure to use an UNZIP program capable
|
||||||
|
of handling long filenames and which preserves the original directory structure
|
||||||
|
of the archive.
|
||||||
|
|
||||||
|
For the next few sections, please note that the Cygnus Tools (Cygwin) are
|
||||||
|
available for the Windows platform, which allow users to use Unix tools on that
|
||||||
|
operating system.
|
||||||
|
|
||||||
|
2.3 Configuring tbaMUD
|
||||||
|
Note: This section applies only to UNIX users. If you’re using Windows, OS/2, or
|
||||||
|
the Amiga, read README.WIN, README.OS2 or README.AMIGA instead.
|
||||||
|
|
||||||
|
tbaMUD must be configured using the configure program which attempts to guess
|
||||||
|
correct values for various system-dependent variables used during compilation.
|
||||||
|
It uses those values to create Makefiles and a header file called conf.h.
|
||||||
|
|
||||||
|
From tbaMUD’s root directory, simply type
|
||||||
|
|
||||||
|
./configure
|
||||||
|
|
||||||
|
If you’re using csh, it may not execute “configure” properly, giving you an
|
||||||
|
error message like “Permission denied”. If this occurs, try “sh ./configure”
|
||||||
|
instead.
|
||||||
|
|
||||||
|
configure can take several minutes to run if you’re using a slow computer. It
|
||||||
|
will print out various status messages while it works, telling you what
|
||||||
|
characteristics of your computer it has found. It should create two Makefiles
|
||||||
|
(src/Makefile and src/util/Makefile) and one header file (src/conf.h).
|
||||||
|
|
||||||
|
You should only need to run configure once – right after you unpack tbaMUD from
|
||||||
|
its archive. You will probably compile the source dozens of times as you add
|
||||||
|
new features, but configure only needs to be run before the first time you
|
||||||
|
compile. Please note that there is one exception to this rule: if you move your
|
||||||
|
MUD to a different computer, you must run configure again before you can
|
||||||
|
recompile the source code. To rerun configure after moving the source, make
|
||||||
|
sure to delete the file called config.cache and then run configure again.
|
||||||
|
|
||||||
|
2.4 Compiling tbaMUD
|
||||||
|
Note: This section applies only to UNIX or Cygwin users. If you’re using
|
||||||
|
windows, OS/2, or the Amiga, read README.WIN, README.OS2, or README.AMIGA instead.
|
||||||
|
|
||||||
|
The src directory contains the source code for the main MUD server; src/util has
|
||||||
|
the source for a dozen or so MUD maintenance utilities. There are two Makefiles,
|
||||||
|
one in each source directory, but all compiling is normally performed from the
|
||||||
|
src directory only. To compile the only tbaMUD server itself, type “make”.
|
||||||
|
Use “make utils” to compile the utilities, or “make all” to compile both the
|
||||||
|
server and the utilities. It is also possible to compile individual
|
||||||
|
utilities from the src/util directory: from src/util, type “make
|
||||||
|
[utility-name]”. All compiled binaries go to the bin directory.
|
||||||
|
|
||||||
|
The stock (unmodified) tbaMUD code should compile with no warnings or errors.
|
||||||
|
|
||||||
|
Despite my best efforts there’s a chance that you’ll have problems compiling
|
||||||
|
tbaMUD if you’re using some version of UNIX that I’ve never seen before. It’s
|
||||||
|
impossible to give general advice on how to port software, except to say that
|
||||||
|
you should ask a friend who knows a lot about both UNIX and C to help you.
|
||||||
|
Also, if you have problems, you should definitely look at the tbaMUD FAQ
|
||||||
|
(Frequently Asked Questions list with Answers), which you’ll find in tbaMUD’s
|
||||||
|
/doc directory.
|
||||||
|
|
||||||
|
If you do port tbaMUD to some other platform successfully, please share your
|
||||||
|
hard work with others by sending a description of what you had to do to get
|
||||||
|
tbaMUD to compile on your system to rumble@tbamud.com. Be sure to include the
|
||||||
|
specific name of your operating system and hardware. Full details on porting to
|
||||||
|
a new system can be found in Porting.txt.
|
||||||
|
|
||||||
|
The Makefile directs all compiled programs to the /bin directory. Although not
|
||||||
|
recommended, you may want to put tbaMUD’s /bin directory in your $PATH. The
|
||||||
|
reason that this is not recommended is that most of the resources are
|
||||||
|
referenced using relative paths, and thus require that you run the programs
|
||||||
|
from the base tbaMUD directory.
|
||||||
|
|
||||||
|
3 Running tbaMUD
|
||||||
|
Note: This section applies only to UNIX or Cygwin users. If you’re using
|
||||||
|
Windows, OS/2, or the Amiga, read README.WIN, README.OS2, or EADME.AMIGA
|
||||||
|
instead.
|
||||||
|
|
||||||
|
3.1 Execution and autorun
|
||||||
|
1. type ’autorun &’
|
||||||
|
2. Wait a few moments for the server to boot.
|
||||||
|
3. type: telnet localhost 4000
|
||||||
|
tbaMUD should always be run from tbaMUD’s “root” directory, not the /bin
|
||||||
|
directory. You can run it manually by typing bin/circle (useful for testing and
|
||||||
|
debugging). For running the game “for real,” it is better to use the autorun
|
||||||
|
shell script provided in tbaMUD’s root directory.
|
||||||
|
|
||||||
|
Autorun lets tbaMUD run itself for long periods of time. It continuously runs
|
||||||
|
the game as well as removing old system logs, moving newer system logs to the
|
||||||
|
log directory, and saving certain log entries to permanent files.
|
||||||
|
|
||||||
|
Autorun can be controlled by creating files with certain names. You can use the
|
||||||
|
’touch’ command to create a file, and, of course, the ’rm’ command to remove a
|
||||||
|
file. If a file called ’.fastboot’ exists, the tbaMUD will reboot immediately
|
||||||
|
if it crashes or is shut down instead of waiting 40 seconds as it normally does.
|
||||||
|
A file called ’.killscript’ will cause the script to terminate itself; i.e. if
|
||||||
|
you want to bring the game down. If you want to temporarily prevent the MUD
|
||||||
|
from rebooting, create a file called “pause”; the script will go into a wait
|
||||||
|
loop until ’pause’ is removed.
|
||||||
|
|
||||||
|
Although you can create these files manually, the shutdown command from within
|
||||||
|
the MUD has several options which will create these files for you. See the
|
||||||
|
shutdown help entry for more information.
|
||||||
|
|
||||||
|
3.2 Command-Line Options
|
||||||
|
tbaMUD recognizes a number of command-line options. You can use them by actually
|
||||||
|
specifying them on the command-line when running tbaMUD manually or, by adding
|
||||||
|
them to the FLAGS variable in your autorun script to use the options
|
||||||
|
automatically every time you run the MUD with autorun.
|
||||||
|
|
||||||
|
The syntax is:
|
||||||
|
circle [-m] [-q] [-r] [-s] [-d <path>] [-p]
|
||||||
|
|
||||||
|
-m Mini-Mud Mode. Mini-mud will be one of your most powerful debugging tools; it
|
||||||
|
causes tbaMUD to boot with an abridged world, cutting the boot time down to a
|
||||||
|
few seconds. It is useful for testing features which are not world-related (i.e,
|
||||||
|
new commands or spells). tbaMUD uses split world files (in the lib/world
|
||||||
|
hierarchy); each directory (i.e. wld, obj, mob, shp, trg, and zon) has a file
|
||||||
|
called "index" which specifies which files should be loaded at boot-time. The
|
||||||
|
file "index.mini" specifies which parts of the world should be loaded with the
|
||||||
|
-m option.
|
||||||
|
|
||||||
|
-q Quick Boot. Prevents checking of timed out object files. Every time tbaMUD
|
||||||
|
boots, it checks every object file to see if it has timed out; if so, it is
|
||||||
|
deleted. This is done primarily to save disk space. If time is more important
|
||||||
|
to you than space, use the -q option. -q is automatically activated when you
|
||||||
|
use -m.
|
||||||
|
|
||||||
|
-r Restricted Game. Allows you to decide at run-time whether or not the game
|
||||||
|
will allow new characters to be created. Using -r is equivalent to typing
|
||||||
|
"wizlock 1."
|
||||||
|
|
||||||
|
-s Special Routines Disabled. Allows you to suppress the assigning and calling
|
||||||
|
of all mobile, object, and world special procedures. Historically used as a
|
||||||
|
debugging tool in conjunction with the -d option (see below), but now obsolete
|
||||||
|
because tbaMUD checks to make sure entities exist before attempting to assign a
|
||||||
|
special procedure to them.
|
||||||
|
|
||||||
|
-d Data Directory. Useful as a debugging and development tool, if you want to
|
||||||
|
keep one or more sets of game data in addition to the standard set, and choose
|
||||||
|
which set is to be used at runtime. For example, you may wish to make a copy of
|
||||||
|
the entire world in a separate directory, so that you can test additions to the
|
||||||
|
world files without subjecting players to unnecessary hazards. The default data
|
||||||
|
directory is ’lib.’ Any core dumps (may they never happen to you!) will take
|
||||||
|
place in the selected data directory.
|
||||||
|
|
||||||
|
-p Port Selection. Allows you to choose on which port the game is to listen
|
||||||
|
for connections. The default port is 4000, which is historically the port used
|
||||||
|
by most DikuMuds. You can change the default in CEDIT and the PORT= line of the
|
||||||
|
autorun script. (The PORT= line of config.c is ignored if it is set in CEDIT.)
|
||||||
|
The port specified on the command line or by the autorun script will take
|
||||||
|
precedence over the port specified in CEDIT or config.c.
|
||||||
|
|
||||||
|
3.3 Creating an Implementor Character
|
||||||
|
The first character to log in to the MUD will be made the maximum (Implementor)
|
||||||
|
level. If you log in and aren’t made an implementor, then the playerfile
|
||||||
|
probably is not empty – take the MUD down, delete the index at
|
||||||
|
tbamud\lib\plrfiles, and start the MUD again. You should fix your stats using
|
||||||
|
the RESTORE command when you first create the character (i.e. type "RESTORE
|
||||||
|
<your-name>".
|
||||||
|
|
||||||
|
Once you are logged in as an implementor, type WIZHELP for a list of privileged
|
||||||
|
commands. In-depth helpfiles exist for all commands.
|
||||||
|
|
||||||
|
To create additional wizard characters, log them in normally as level 1. Then,
|
||||||
|
advance them using your implementor character, using the ADVANCE command.
|
||||||
|
|
||||||
|
4 Customizing tbaMUD
|
||||||
|
Once you get over the initial euphoria of having your own MUD compile and run
|
||||||
|
successfully for the first time, you should be aware of some of the files which
|
||||||
|
control how tbaMUD looks and feels so that you can configure it for your
|
||||||
|
personal taste.
|
||||||
|
|
||||||
|
4.1 CEDIT and config.c
|
||||||
|
The first thing you should do is test out the online configuration editor;
|
||||||
|
CEDIT. Go through all of the menus and setup your MUD as you desire. This will
|
||||||
|
cover loadrooms, messages, PK, PT, etc. CEDIT replaces the required manual
|
||||||
|
editing of config.c, make, and reboot. But you should be familiar with both.
|
||||||
|
CEDIT info is saved and takes precedence over settings in config.c
|
||||||
|
|
||||||
|
4.2 TEDIT and Text Files
|
||||||
|
The lib/text directory contains all of the text files read by players. All of
|
||||||
|
these files can be edited online by using the text editor TEDIT. The most
|
||||||
|
visible file is “motd”, (Message Of The Day), which is the message that mortals
|
||||||
|
see (though not necessarily read!) when they log in. Similarly, the “imotd”
|
||||||
|
(Immortal MOTD) is seen by immortals when they log in. Other interesting
|
||||||
|
files are “news” (for the NEWS command), “help” (for the HELP command with no
|
||||||
|
arguments), and others.
|
||||||
|
|
||||||
|
One file is particularly important: “policy”. Despite what anyone tells you,
|
||||||
|
and your best efforts to the contrary, your MUD will have political problems.
|
||||||
|
If anyone tells you that you can run a MUD without politics, they’re wrong. If
|
||||||
|
you tell your players that you’re going to run a revolutionary MUD that doesn’t
|
||||||
|
have any politics, you’re lying. Every MUD has political problems sooner or
|
||||||
|
later. Unfortunately, this usually occurs “sooner”. There are various ways to
|
||||||
|
make political problems easier to handle, but the best way is to decide on some
|
||||||
|
ground rules from the very beginning, and then set those decisions down in
|
||||||
|
writing. That’s what the “policy” file is for. You probably know what kind of
|
||||||
|
political problems MUDs have (you are not trying to run a MUD without ever
|
||||||
|
having played one, are you!?) – stuff like playerkilling, thieving, kill
|
||||||
|
stealing, client use, multiplaying, reimbursements, etc. Decide on your
|
||||||
|
policies early and make sure your characters know what those policies are.
|
||||||
|
|
||||||
|
It is also important to write down a set of rules dictating what immortals are
|
||||||
|
allowed to do and not allowed to do. That’s what the “handbook” (Immortal
|
||||||
|
handbook) is for. Immortals will always try to bend you as far as they can, so
|
||||||
|
it’s important for you to decide on answers to questions before those questions
|
||||||
|
come up. Can immortals assist players? What about giving a single ’cure light’
|
||||||
|
for a player about to die? Can immortals kill mobiles for their own enjoyment?
|
||||||
|
Can they kill players for the same reason? Are they allowed to make policy?
|
||||||
|
Break policy? Moderate disputes? Turn over each others’ decisions?
|
||||||
|
|
||||||
|
4.3 World Files
|
||||||
|
The root of the area hierarchy is lib/world/. lib/world/ has 6 subdirectories:
|
||||||
|
wld, mob, obj, shp, trg, and zon, which is where the world, mobile, object,
|
||||||
|
shop, trigger, and zone files go, respectively.
|
||||||
|
|
||||||
|
Each directory has a set of world files in it with the appropriate extension
|
||||||
|
(i.e. the obj subdir will have a bunch of files ending with “.obj”, such as
|
||||||
|
30.obj, 31.obj, etc.) plus two special files called “index” and “index.mini”.
|
||||||
|
“index” is a list of which world files are to be loaded by tbaMUD. New zones
|
||||||
|
can be added in game with the "zedit new" command. “index.mini” controls which
|
||||||
|
(smaller) set of world files should be loaded in the debugging mode (Mini-Mud
|
||||||
|
Mode, explained below.)
|
||||||
|
|
||||||
|
5 System Logs
|
||||||
|
tbaMUD writes a wide variety of information to standard output and standard
|
||||||
|
error. If you’re using the autorun script, the boot messages are put into a
|
||||||
|
file called “syslog”. During tbaMUD’s boot sequence, the system log keeps a
|
||||||
|
record of everything the MUD is doing to initialize itself; this can be useful
|
||||||
|
to determine what the problem is if the MUD dies while it is booting. Once the
|
||||||
|
game is up and running, the syslog contains player information, recording when
|
||||||
|
players connect, disconnect, rent, unrent, quit, die, hit death traps, etc. The
|
||||||
|
game also records status information about itself, falling generally into two
|
||||||
|
categories: usage information and errors.
|
||||||
|
|
||||||
|
5.1 Player Information
|
||||||
|
The player information recorded by tbaMUD’s system logs will serve you very well
|
||||||
|
as your players start to make wild claims about strange bugs resulting in them
|
||||||
|
losing equipment or points. Many mudders prey on the insecurities of a new mud
|
||||||
|
administrator who is terrified that his or her MUD is riddled with bugs and
|
||||||
|
will do anything to satisfy grumpy players – don’t let yourself fall into that
|
||||||
|
trap! tbaMUD is bound to contain bugs, but most of the core systems have been
|
||||||
|
well tested, so you should take claims such as “I magically lost all my stuff!”
|
||||||
|
with a grain of salt and check your system logs.
|
||||||
|
|
||||||
|
If a player ever asks you for reimbursement of equipment, money, gold,
|
||||||
|
experience points (XP), or whatever, your gut reaction should always be to
|
||||||
|
check the logs first.
|
||||||
|
|
||||||
|
As a sidebar, let me point out that the value of system logs is twofold: 1)
|
||||||
|
they actually provide you with valuable information, and 2) they make your
|
||||||
|
players paranoid. When I first started mudding and I heard about this
|
||||||
|
mysterious “system log”, it made me incredibly paranoid. Now that I’ve done a
|
||||||
|
good deal of MUD administration, I’ve seen the same paranoia in many other
|
||||||
|
players.
|
||||||
|
|
||||||
|
That paranoia is a very good thing. The system logs become an abstract and
|
||||||
|
shapeless but omnipresent force on the MUD. Players hear about “the System Log”
|
||||||
|
and then get paranoid that everything they do is being recorded, so they tend
|
||||||
|
to behave, lest the evil System Log betray their wrongdoings to the Gods.
|
||||||
|
|
||||||
|
For this reason, when you go to check your logs, it’s a good idea to say something like “Hold on... let me go check the system logs, OK?” because it
|
||||||
|
reinforces the syslog’s presence in the collective psyche of your players.
|
||||||
|
|
||||||
|
Back to the point. When someone claims that they’ve been wronged by the evil
|
||||||
|
system, always check the logs. The logs give you power to say things like “What
|
||||||
|
do you mean your items disappeared in rent? It says right here in the logs
|
||||||
|
‘Rasmussen has quit the game.’ You did not rent at all, you just quit!”
|
||||||
|
|
||||||
|
To diffuse disputes such as, “The game dumped my stuff, but I had enough
|
||||||
|
money!!” or “I logged in and my stuff was gone, there must be a bug!!”, two
|
||||||
|
types of log entries are written. First, every time a character rents, the log
|
||||||
|
records the character’s per diem rent rate as well as the total amount of money
|
||||||
|
on hand and in the bank. Second, the log records makes a record of all
|
||||||
|
characters’ equipment dumped due to insufficient funds.
|
||||||
|
|
||||||
|
Remember, rent is specified as a daily rate but is amortized on a per-second
|
||||||
|
basis! In other words, if you rent at the rate of 100 coins per day and come
|
||||||
|
back 36 hours later, you’ll be charged 150 coins. Or you can be nice and leave
|
||||||
|
rent disabled.
|
||||||
|
|
||||||
|
The autorunscript saves 6 levels of raw system logs. In addition, it greps the
|
||||||
|
logs for certain pieces of extra-juicy information to save indefinitely.
|
||||||
|
|
||||||
|
The system logs are your friends. Love them.
|
||||||
|
|
||||||
|
5.2 Usage Information
|
||||||
|
Every 5 minutes, the game counts how many people are playing and records that
|
||||||
|
information in the system log. Optionally, if you define RUSAGE in comm.c, it
|
||||||
|
will also record system resource information such as CPU time and memory used.
|
||||||
|
The usage information currently logged by tbaMUD is, as you can see, somewhat
|
||||||
|
sparse; local MUD admins are encouraged to add to this code as is appropriate
|
||||||
|
for their particular site.
|
||||||
|
|
||||||
|
Usage information isn’t critical, but it is interesting to look at the usage
|
||||||
|
patterns to determine when your peak playing hours are. If you’re good at using
|
||||||
|
‘cut’ and other Unix utilities, you can even dazzle your friends by graphing
|
||||||
|
your MUD’s system usage.
|
||||||
|
|
||||||
|
Note: friends not included with the tbaMUD distribution.
|
||||||
|
|
||||||
|
5.3 Errors
|
||||||
|
Just as your first gut instinct should be to look at the logs if a player starts
|
||||||
|
begging you for something, your first gut instinct in the event of a crash or
|
||||||
|
unexpected shutdown should also be to look at the system logs.
|
||||||
|
|
||||||
|
A Unix utility called ‘tail’ is used to look at the last few lines of a text
|
||||||
|
file; it is very useful for looking at the last entries in the system log to
|
||||||
|
see the last thing that happened before the shutdown. This can be done in game
|
||||||
|
with the "file" command by using the "file crash" option. Often, tbaMUD will
|
||||||
|
report an error in the logs just before it crashes. This method is particularly
|
||||||
|
useful if the MUD crashes during its boot sequence, because the logging during
|
||||||
|
boot is intensive.
|
||||||
|
|
||||||
|
If tbaMUD shuts down unexpectedly and there is no core dump in the /lib
|
||||||
|
directory, the game probably detected an internal error and killed itself. Such
|
||||||
|
shutdowns are always preceded by entries in the system log describing the error.
|
||||||
|
|
||||||
|
If there is no error message at the end of the log, then there probably IS a
|
||||||
|
core dump, so you can use ‘gdb’ to examine the core dump and determine the
|
||||||
|
reason for the crash. The file hacker.txt, generously provided by Furey of MERC
|
||||||
|
Industries, offers useful insight into the art and science of debugging – you’d
|
||||||
|
be well advised to give it a look-see.
|
||||||
|
|
||||||
|
tbaMUD sometimes encounters a serious but non-fatal error; in this case, the
|
||||||
|
error will be written to the system log with the prefix SYSERR, but the MUD
|
||||||
|
will not shut itself down. You should always be aware of any SYSERRs which occur
|
||||||
|
– they are often useful for foreseeing imminent danger or averting problems
|
||||||
|
before they become critical. If a SYSERR does occur, try to determine if a
|
||||||
|
change you’ve made recently has caused it. Ignoring SYSERRs is like ignoring
|
||||||
|
compiler warnings: you can be tempted to ignore them because the game keeps
|
||||||
|
going even if they exist, but you can easily get yourself into trouble by not
|
||||||
|
listening. The autorun script saves all SYSERRs to the file log/errors.
|
||||||
|
|
||||||
|
6 MUD Maintenance
|
||||||
|
6.1 Technical Maintenance
|
||||||
|
Once you get the MUD up and running, you will surely want to modify it – adding
|
||||||
|
new areas, new features, new code, and new ideas, however these topics are
|
||||||
|
beyond the scope of this document. See coding.txt, building.txt, and other
|
||||||
|
documents in the /doc directory and online at http://tbamud.com. This section
|
||||||
|
focuses on some of the simple maintenance that’ll be necessary to keep your MUD
|
||||||
|
running smoothly. Make sure not to get so caught up in being a God that you
|
||||||
|
forgot you’re also supposed to be acting as a software engineer!
|
||||||
|
|
||||||
|
First, you should look at the log/errors file regularly to make sure there are
|
||||||
|
no recurring problems, particularly problems that may have been caused by code
|
||||||
|
you’ve added. If the MUD crashes, it will usually generate what is called a
|
||||||
|
“core dump” – a big file called “core.#” in your lib directory, created by the
|
||||||
|
operating system to record the state the game was in the moment before it
|
||||||
|
crashed. You should look at the core dump using a debugger such as “gdb” to
|
||||||
|
determine why the MUD crashed. See the file “hacker.txt” for more information
|
||||||
|
about debugging.
|
||||||
|
|
||||||
|
6.2 Diplomatic Maintenance
|
||||||
|
Okay, so now you have your wonderful tbaMUD up and running smoothly and all is
|
||||||
|
right with the world. Right? Wrong.
|
||||||
|
|
||||||
|
Well, technically, right. tbaMUD requires very little day-to-day attention in
|
||||||
|
order to keep the program itself running smoothly. But the MUD itself is just a
|
||||||
|
series of instructions running on a computer, processing data. Never lose sight
|
||||||
|
of the fact that there will be dozens, hundreds, or maybe even thousands of
|
||||||
|
people connecting to your MUD – and they are not programs. They are people!
|
||||||
|
|
||||||
|
From the technical side, there are relatively few things you have to do to keep
|
||||||
|
the game running. But you cannot just dump a MUD on the Internet and then ignore
|
||||||
|
it! Spend time on your MUD. Try to keep up with the boards, and make an effort
|
||||||
|
to respond to the complaints. Take a look at the ‘bug’, ‘typo’, and ‘idea’ files
|
||||||
|
from time to time – and respond to some of the ideas using Mudmail. Try to
|
||||||
|
respond to Mudmail you receive from players in a timely manner. Make sure that
|
||||||
|
your ‘news’, ‘policy’ and other text files are up-to date and suit the political
|
||||||
|
climate on your MUD.
|
||||||
|
|
||||||
|
If you cannot or just do not want to deal with the player politics, make sure
|
||||||
|
that you choose someone who can and will, and make them responsible for dealing
|
||||||
|
with it. If no one does it, your MUD will stagnate and die.
|
||||||
|
|
||||||
|
7 Final Thoughts
|
||||||
|
Try to remember that running a MUD should be fun. It can sometimes be easy to
|
||||||
|
lose sight of the ultimate goal of personal enjoyment that MUDs are supposed to
|
||||||
|
provide, particularly when MUDs start to get crushed under the weight of their
|
||||||
|
own politics or the egos of the administrators. If you find that your MUD is
|
||||||
|
more of a source of frustration than enjoyment, don’t be afraid to close it.
|
||||||
|
|
||||||
|
Good luck with your MUD! Always feel free to email or stop by The Builder
|
||||||
|
Academy and let us know what you think of the MUD, and the interesting things
|
||||||
|
you’ve done with it. We cannot promise a timely response, but we love hearing
|
||||||
|
from people who are using our code.
|
||||||
|
|
||||||
|
For further information and updates check out http://tbamud.com.
|
BIN
doc/building.pdf
BIN
doc/building.pdf
Binary file not shown.
1903
doc/building.txt
Normal file
1903
doc/building.txt
Normal file
File diff suppressed because it is too large
Load diff
BIN
doc/coding.pdf
BIN
doc/coding.pdf
Binary file not shown.
1678
doc/coding.txt
Normal file
1678
doc/coding.txt
Normal file
File diff suppressed because it is too large
Load diff
BIN
doc/color.pdf
BIN
doc/color.pdf
Binary file not shown.
123
doc/color.txt
Normal file
123
doc/color.txt
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
Using Color In tbaMUD
|
||||||
|
Originally by Jeremy Elson
|
||||||
|
|
||||||
|
This document is a description of how to write C code which displays messages
|
||||||
|
to players in color in the tbaMUD game engine. Its intended audience is for
|
||||||
|
Coders of tbaMUD.
|
||||||
|
|
||||||
|
tbaMUD allows you to create colorful messages by using ANSI control sequences.
|
||||||
|
Each player may select what “level” of color he/she desires from the four
|
||||||
|
levels “off,” “brief,” “normal,” and “complete.” Each player can select his/her
|
||||||
|
color level by using the TOGGLE COLOR command from within the MUD; you as the
|
||||||
|
programmer must decide which messages will be colored for each of the color
|
||||||
|
levels.
|
||||||
|
|
||||||
|
All files in which you wish to use color must have the line:
|
||||||
|
|
||||||
|
#include "screen.h"
|
||||||
|
|
||||||
|
This should be put in after all other includes in the beginning of the file.
|
||||||
|
|
||||||
|
There are 8 colors available – “normal,” red, green, yellow, blue, magenta,
|
||||||
|
cyan and white. They are accessible by sending control sequences as part of
|
||||||
|
another string, for example:
|
||||||
|
|
||||||
|
sprintf(buf, "If you’re %shappy%s and you know it clap "
|
||||||
|
"%d of your hands.\n\r", x, y, num_of_hands);
|
||||||
|
send_to_char(ch, buf);
|
||||||
|
|
||||||
|
In this example, x and y are the “on” and “off” sequences for the color you
|
||||||
|
want. There are 2 main series of color macros available for you to use (don’t
|
||||||
|
actually use “x” and “y,” of course!): the K series and the CC series. The CC
|
||||||
|
(Conditional Color) series is recommended for most general use.
|
||||||
|
|
||||||
|
The name of the actual sequence starts with the name of its series, plus a
|
||||||
|
3-letter color code, as follows:
|
||||||
|
|
||||||
|
Normal: NRM
|
||||||
|
Red: RED
|
||||||
|
Yellow: YEL
|
||||||
|
Green: GRN
|
||||||
|
Blue: BLU
|
||||||
|
Magenta: MAG
|
||||||
|
Cyan: CYN
|
||||||
|
White: WHT
|
||||||
|
|
||||||
|
For example, white in the K series is KWHT; blue in the CC series is
|
||||||
|
CCBLU() (arguments defined below).
|
||||||
|
|
||||||
|
The K series requires no arguments, and is simply a macro to the ANSI color
|
||||||
|
code. Therefore, if you use a K-series color code, the color will ALWAYS be
|
||||||
|
sent, even if the person you’re sending it to has color off. This can very bad.
|
||||||
|
Some people who do not have ANSI-compatible terminals will see garbage
|
||||||
|
characters instead of colors. If the terminal correctly ignores ANSI color
|
||||||
|
codes, then nothing will show up on their screen at all. The K series is mainly
|
||||||
|
used to print colors to a string if the player’s color level will later be
|
||||||
|
tested manually (for an example, see do_gen_com in act.comm.c).
|
||||||
|
|
||||||
|
The recommended series is the CC series (i.e. CCNRM(), CCRED(), etc.) The CC
|
||||||
|
series macros require two arguments – a pointer to the character to whom the
|
||||||
|
string is being sent, and the minimum color level the player must be set to in
|
||||||
|
order to see the color. Color sent as 'brief' (formerly known as sparse it was
|
||||||
|
changed for consistancy with the syslog command) (C_SPR) will be seen by people
|
||||||
|
with color set to sparse, normal, or complete; color sent as ‘normal’ (C_NRM)
|
||||||
|
will be seen only by people with color set to normal or complete; color sent as
|
||||||
|
‘complete’ (C_CMP) will be seen only by people with color set to complete.
|
||||||
|
|
||||||
|
To illustrate the above, an example is in order:
|
||||||
|
|
||||||
|
#include "screen.h"
|
||||||
|
/* include screen.h in all files that you use color in */
|
||||||
|
|
||||||
|
ACMD(do_showcolor)
|
||||||
|
{
|
||||||
|
char buf[300];
|
||||||
|
|
||||||
|
sprintf(buf, "Don’t you just love %scolor%s, %scolor%s, " "%sCOLOR%s!\n\r",
|
||||||
|
CCBLU(ch, C_CMP), CCNRM(ch, C_CMP), CCYEL(ch, C_NRM), CCNRM(ch, C_NRM),
|
||||||
|
CCRED(ch, C_SPR), CCNRM(ch, C_SPR));
|
||||||
|
send_to_char(ch, buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
What does this do? For people with color set to Complete, it prints:
|
||||||
|
Don’t you just love color, color, COLOR! (blue) (yellow) (red)
|
||||||
|
|
||||||
|
People who have color set to Normal will see:
|
||||||
|
Don’t you just love color, color, COLOR! (yellow) (red)
|
||||||
|
|
||||||
|
People who have color set to Sparse will see:
|
||||||
|
Don’t you just love color, color, COLOR! (red)
|
||||||
|
|
||||||
|
People who have color set to Off will see:
|
||||||
|
Don’t you just love color, color, COLOR! (no color, as you’d expect)
|
||||||
|
|
||||||
|
There are several common pitfalls with using the CC series of color macros:
|
||||||
|
|
||||||
|
Do not confuse CCNRM with C_NRM. CCNRM() is a macro to turn the color back to
|
||||||
|
normal; C_NRMis a color level of “normal.” Always make sure that every pair of
|
||||||
|
“on” and “off” codes are at the same color level. For example:
|
||||||
|
|
||||||
|
WRONG: sprintf(buf, "%sCOLOR%s\n\r", CCBLU(ch, C_NRM), CCNRM(ch, C_CMP));
|
||||||
|
|
||||||
|
This is wrong because if someone has their color level set to Normal, the CCBLU
|
||||||
|
code will be sent but the CCNRM command will not, causing all subsequent output
|
||||||
|
to be blue.
|
||||||
|
|
||||||
|
WRONG: sprintf(buf, "%sCOLOR%s\n\r", CCBLU(ch, C_CMP), CCNRM(ch, C_NRM));
|
||||||
|
|
||||||
|
The above statement is also wrong, although not as bad. In this case, someone
|
||||||
|
with color set to Normal will (correctly) not get the CCBLU code, but will then
|
||||||
|
unnecessarily get the CCNRM code. Never send a color code if you don’t have to.
|
||||||
|
The codes are several bytes long, and cause a noticeable pause at 2400 baud.
|
||||||
|
|
||||||
|
This should go without saying, but don’t ever send color at the C_OFF level.
|
||||||
|
|
||||||
|
Special precautions must be taken when sending a colored string to a large
|
||||||
|
group of people. You can’t use the color level of “ch” (the person sending the
|
||||||
|
string) – each person receiving the string must get a string appropriately
|
||||||
|
colored for his/her level. In such cases, it is usually best to set up two
|
||||||
|
strings (one colored and one not), and test each player’s color level
|
||||||
|
individually (see do_gen_comin act.comm.c for an example).
|
335
doc/debugging.txt
Normal file
335
doc/debugging.txt
Normal file
|
@ -0,0 +1,335 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
The Art of Debugging
|
||||||
|
Originally by Michael Chastain and Sammy
|
||||||
|
|
||||||
|
The following documentation is excerpted from Merc 2.0’s hacker.txt file. It
|
||||||
|
was written by Furey of MERC Industries and is included here with his
|
||||||
|
permission. We have packaged it with tbaMUD (changed in a couple of places,
|
||||||
|
such as specific filenames) because it offers good advice and insight into the
|
||||||
|
art and science of software engineering. More information about tbaMUD,
|
||||||
|
can be found at the tbaMUD home page http://tbamud.com.
|
||||||
|
|
||||||
|
1 “I’m running a Mud so I can learn C programming!”
|
||||||
|
|
||||||
|
Yeah, right. The purpose of this document is to record some of our knowledge,
|
||||||
|
experience and philosophy. No matter what your level, we hope that this
|
||||||
|
document will help you become a better software engineer. Remember that
|
||||||
|
engineering is work, and no document will substitute for your own thinking,
|
||||||
|
learning and experimentation.
|
||||||
|
|
||||||
|
2 How to Learn in the First Place
|
||||||
|
|
||||||
|
Play with something.
|
||||||
|
Read the documentation on it.
|
||||||
|
Play with it some more.
|
||||||
|
Read documentation again.
|
||||||
|
Play with it some more.
|
||||||
|
Read documentation again.
|
||||||
|
Play with it some more.
|
||||||
|
Read documentation again.
|
||||||
|
Get the idea?
|
||||||
|
|
||||||
|
The idea is that your mind can accept only so much “new data” in a single
|
||||||
|
session. Playing with something doesn’t introduce very much new data, but it
|
||||||
|
does transform data in your head from the “new” category to the “familiar”
|
||||||
|
category. Reading documentation doesn’t make anything “familiar,” but it
|
||||||
|
refills your “new” hopper.
|
||||||
|
|
||||||
|
Most people, if they even read documentation in the first place, never return
|
||||||
|
to it. They come to a certain minimum level of proficiency and then never
|
||||||
|
learn any more. But modern operating systems, languages, networks, and even
|
||||||
|
applications simply cannot be learned in a single session. You have to work
|
||||||
|
through the two-step learning cycle many times to master it.
|
||||||
|
|
||||||
|
3 Basic Unix Tools
|
||||||
|
|
||||||
|
man gives you online manual pages.
|
||||||
|
|
||||||
|
grep stands for “global regular expression print;” searches for strings in text
|
||||||
|
files.
|
||||||
|
|
||||||
|
vi, emacs, jove use whatever editor floats your boat, but learn the hell out
|
||||||
|
of it; you should know every command in your editor.
|
||||||
|
|
||||||
|
ctags mags “tags” for your editor which allows you to go to functions by name
|
||||||
|
in any source file.
|
||||||
|
|
||||||
|
>, >>, <, | input and output redirection at the command line; get someone to
|
||||||
|
show you, or dig it out of “man csh”
|
||||||
|
|
||||||
|
These are the basic day-in day-out development tools. Developing without
|
||||||
|
knowing how to use all of these well is like driving a car without knowing
|
||||||
|
how to change gears.
|
||||||
|
|
||||||
|
4 Debugging: Theory
|
||||||
|
|
||||||
|
Debugging is a science. You formulate a hypothesis, make predictions based on
|
||||||
|
the hypothesis, run the program and provide it experimental input, observe its
|
||||||
|
behavior, and confirm or refute the hypothesis.
|
||||||
|
|
||||||
|
A good hypothesis is one which makes surprising predictions which then come
|
||||||
|
true; predictions that other hypotheses don’t make.
|
||||||
|
|
||||||
|
The first step in debugging is not to write bugs in the first place. This
|
||||||
|
sounds obvious, but sadly, is all too often ignored.
|
||||||
|
|
||||||
|
If you build a program, and you get any errors or any warnings, you should fix
|
||||||
|
them before continuing. C was designed so that many buggy ways of writing code
|
||||||
|
are legal, but will draw warnings from a suitably smart compiler (such as “gcc”
|
||||||
|
with the -Wall flag enabled). It takes only minutes to check your warnings and
|
||||||
|
to fix the code that generates them, but it takes hours to find bugs otherwise.
|
||||||
|
|
||||||
|
“Desk checking” (proof reading) is almost a lost art these days. Too bad. You
|
||||||
|
should desk check your code before even compiling it, and desk-check it again
|
||||||
|
periodically to keep it fresh in mind and find new errors. If you have someone
|
||||||
|
in your group whose only job it is to desk-check other people’s code, that
|
||||||
|
person will find and fix more bugs than everyone else combined.
|
||||||
|
|
||||||
|
One can desk-check several hundred lines of code per hour. A top-flight
|
||||||
|
software engineer will write, roughly, 99% accurate code on the first pass,
|
||||||
|
which still means one bug per hundred lines. And you are not top flight. So...
|
||||||
|
you will find several bugs per hour by desk checking. This is a very rapid bug
|
||||||
|
fixing technique. Compare that to all the hours you spend screwing around with
|
||||||
|
broken programs trying to find one bug at a time.
|
||||||
|
|
||||||
|
The next technique beyond desk-checking is the time-honored technique of
|
||||||
|
inserting “print” statements into the code, and then watching the logged
|
||||||
|
values. Within tbaMUD code, you can call printf(), fprintf(), or log()to dump
|
||||||
|
interesting values at interesting times. Where and when to dump these values
|
||||||
|
is an art, which you will learn only with practice.
|
||||||
|
|
||||||
|
If you don’t already know how to redirect output in your operating system, now
|
||||||
|
is the time to learn. On Unix, type the command “man csh”, and read the part
|
||||||
|
about the “>” operator. You should also learn the difference between “standard
|
||||||
|
output” (for example, output from “printf”) and “standard error” (for example,
|
||||||
|
output from “fprintf(stderr, ...)”).
|
||||||
|
|
||||||
|
Ultimately, you cannot fix a program unless you understand how it is operating
|
||||||
|
in the first place. Powerful debugging tools will help you collect data, but
|
||||||
|
they can’t interpret it, and they can’t fix the underlying problems. Only you
|
||||||
|
can do that.
|
||||||
|
|
||||||
|
When you find a bug... your first impulse will be to change the code, kill the
|
||||||
|
manifestation of the bug, and declare it fixed. Not so fast! The bug you
|
||||||
|
observe is often just the symptom of a deeper bug. You should keep pursuing the
|
||||||
|
bug, all the way down. You should grok the bug and cherish it in fullness
|
||||||
|
before causing its discorporation.
|
||||||
|
|
||||||
|
Also, when finding a bug, ask yourself two questions: “What design and
|
||||||
|
programming habits led to the introduction of the bug in the first place?” And:
|
||||||
|
“What habits would systematically prevent the introduction of bugs like this?”
|
||||||
|
|
||||||
|
5 Debugging: Tools
|
||||||
|
|
||||||
|
When a Unix process accesses an invalid memory location, or (more rarely)
|
||||||
|
executes an illegal instruction, or (even more rarely) something else goes
|
||||||
|
wrong, the Unix operating system takes control. The process is incapable of
|
||||||
|
further execution and must be killed. Before killing the process, however, the
|
||||||
|
operating system does something for you: it opens a file named “core” and
|
||||||
|
writes the entire data space of the process into it.
|
||||||
|
|
||||||
|
Thus, “dumping core” is not a cause of problems, or even an effect of problems.
|
||||||
|
It’s something the operating system does to help you find fatal problems which
|
||||||
|
have rendered your process unable to continue.
|
||||||
|
|
||||||
|
One reads a “core” file with a debugger. The two most popular debuggers on Unix
|
||||||
|
are adb and gdb, although occasionally one finds dbx. Typically one starts a
|
||||||
|
debugger like this: “gdb bin/circle” or “gdb bin/circle lib/core”.
|
||||||
|
|
||||||
|
The first thing, and often the only thing, you need to do inside the debugger
|
||||||
|
is take a stack trace. In adb, the command for this is “$c”. In gdb, the
|
||||||
|
command is “backtrace”. In dbx, the command is “where”. The stack trace will
|
||||||
|
tell you what function your program was in when it crashed, and what functions
|
||||||
|
were calling it. The debugger will also list the arguments to these functions.
|
||||||
|
Interpreting these arguments, and using more advanced debugger features,
|
||||||
|
requires a fair amount of knowledge about assembly language programming.
|
||||||
|
|
||||||
|
6 Using GDB
|
||||||
|
|
||||||
|
GDB has some online help, though it is not the best. It does at least give
|
||||||
|
a summary of commands and what they're supposed to do. What follows is
|
||||||
|
Sammy's short intro to gdb with some bughunting notes following it:
|
||||||
|
|
||||||
|
tbaMUD allows multiple core files to be created. Be sure to delete them when
|
||||||
|
you are done. If you've got a core file, go to your lib directory and type:
|
||||||
|
|
||||||
|
> dir
|
||||||
|
|
||||||
|
You should see the core files listed, something like:
|
||||||
|
core.#
|
||||||
|
|
||||||
|
To use the core file type:
|
||||||
|
> gdb ../bin/circle core.#
|
||||||
|
|
||||||
|
If you want to hunt bugs in real time (causing bugs to find the cause as
|
||||||
|
opposed to checking a core to see why the MUD crashed earlier) use:
|
||||||
|
|
||||||
|
> gdb bin/circle
|
||||||
|
|
||||||
|
If you're working with a core, gdb should show you where the crash occurred.
|
||||||
|
If you get an actual line that failed, you've got it made. If not, the
|
||||||
|
included message should help. If you're working in real time, now's the
|
||||||
|
time to crash the MUD so you can see what gdb catches.
|
||||||
|
|
||||||
|
When you've got the crash info, you can type ``where'' to see which function
|
||||||
|
called the crash function, which function called that one, and so on all the
|
||||||
|
way up to ``main()''.
|
||||||
|
|
||||||
|
I should explain about ``context'' You may type ``print ch'' which you
|
||||||
|
would expect to show you the ch variable, but if you're in a function that
|
||||||
|
doesn't get a ch passed to it (real_mobile, etc), you can't see ch because
|
||||||
|
it's not in that context. To change contexts (the function levels you saw
|
||||||
|
with where) type ``up'' to go up. You start at the bottom, but once you go
|
||||||
|
up, and up, and up, you can always go back ``down''. You may be able to go
|
||||||
|
up a couple functions to see a function with ch in it, if finding out who
|
||||||
|
caused the crash is useful (it normally isn't).
|
||||||
|
|
||||||
|
The ``print'' command is probably the single most useful command, and lets
|
||||||
|
you print any variable, and arithmetic expressions (makes a nice calculator
|
||||||
|
if you know C math). Any of the following are valid and sometimes useful:
|
||||||
|
|
||||||
|
print ch (fast way to see if ch is a valid pointer, 0 if it's not)
|
||||||
|
print *ch (prints the contents of ch, rather than the pointer address)
|
||||||
|
print ch->player.name (same as GET_NAME(ch))
|
||||||
|
print world[ch->in_room].number (vnum of the room the char is in)
|
||||||
|
etc..
|
||||||
|
|
||||||
|
Note that you can't use macros (all those handy psuedo functions like GET_NAME
|
||||||
|
and GET_MAX_HIT), so you'll have to look up the full structure path of
|
||||||
|
variables you need.
|
||||||
|
|
||||||
|
Type ``list'' to see the source before and after the line you're currently
|
||||||
|
looking at. There are other list options but I'm unfamiliar with them.
|
||||||
|
|
||||||
|
There are only a couple of commands to use in gdb, though with some patience
|
||||||
|
they can be very powerful. The only commands I've ever used are:
|
||||||
|
|
||||||
|
run well, duh.
|
||||||
|
print [variable] also duh, though it does more than you might think
|
||||||
|
list shows you the source code in context
|
||||||
|
break [function] set a breakpoint at a function
|
||||||
|
clear [function] remove a breakpoint
|
||||||
|
step execute one line of code
|
||||||
|
cont continue running after a break or ctrl-c
|
||||||
|
|
||||||
|
I've run into nasty problems quite a few times. The cause is often a memory
|
||||||
|
problem, usually with pointers, pointers to nonexistent memory. If you free
|
||||||
|
a structure, or a string or something, the pointer isn't always set to NULL,
|
||||||
|
so you may have code that checks for a NULL pointer that thinks the pointer
|
||||||
|
is ok since it's not NULL. You should make sure you always set pointers to
|
||||||
|
NULL after freeing them.
|
||||||
|
|
||||||
|
Ok, now for the hard part. If you know where the problem is, you should be
|
||||||
|
able to duplicate it with a specific sequence of actions. That makes things
|
||||||
|
much easier. What you'll have to do is pick a function to ``break'' at.
|
||||||
|
The ideal place to break is immediately before the crash. For example, if
|
||||||
|
the crash occurred when you tried to save a mob with medit, you might be
|
||||||
|
able to ``break mobs_to_file''. Try that one first.
|
||||||
|
|
||||||
|
When you `medit save', the MUD will hang. GDB will either give you segfault
|
||||||
|
info, or it will be stopped at the beginning of mobs_to_file. If it
|
||||||
|
segfaulted, pick an earlier function, like copy_mobile, or even do_medit.
|
||||||
|
|
||||||
|
When you hit a breakpoint, print the variables that are passed to the
|
||||||
|
function to make sure they look ok. Note that printing the contents of
|
||||||
|
pointers is possible with a little playing around. For example, if you
|
||||||
|
print ch, you get a hex number that shows you the memory location where ch
|
||||||
|
is at. It's a little helpful, but try print *ch and you'll notice that it
|
||||||
|
prints the contents of the ch structure, which is usually more useful.
|
||||||
|
print ch->player will give you the name of the person who entered the
|
||||||
|
command you're looking at, and some other info. If you get a no ch in this
|
||||||
|
context it is because the ch variable wasn't passed to the function you're
|
||||||
|
currently looking at.
|
||||||
|
|
||||||
|
Ok, so now you're ready to start stepping. When GDB hit your breakpoint, it
|
||||||
|
showed you the first line of executable code in your function, which will
|
||||||
|
sometimes be in your variable declarations if you initialized any variables
|
||||||
|
(ex: int i = 0). As you're stepping through lines of code, you'll see one
|
||||||
|
line at a time. Note that the line you see hasn't been run yet. It's
|
||||||
|
actually the _next_ line to be executed. So if the line is a = b + c;,
|
||||||
|
printing a will show you what a was before this line, not the sum of b and
|
||||||
|
c. If you have an idea of where the crash is occurring, you can keep
|
||||||
|
stepping till you get to that part of the code (tip: pressing return will
|
||||||
|
repeat the last GDB command, so you can type step once, then keep pressing
|
||||||
|
return to step quickly). If you have no idea where the problem is, the
|
||||||
|
quick and dirty way to find your crash is to keep pressing return rapidly
|
||||||
|
(don't hold the eturn key or you'll probably miss it). When you get the seg
|
||||||
|
fault, you can't step any more, so it should be obvious when that happens.
|
||||||
|
|
||||||
|
Now that you've found the exact line where you get the crash, you should
|
||||||
|
start the MUD over and step more slowly this time. What I've found that
|
||||||
|
works really well to save time is to create a dummy function. This one will
|
||||||
|
work just fine:
|
||||||
|
|
||||||
|
void dummy(void){}
|
||||||
|
|
||||||
|
Put that somewhere in the file you're working on. Then, right before the
|
||||||
|
crash, put a call to dummy in the code (ex: dummy();). Then set your
|
||||||
|
breakpoint at dummy, and when you hit the breakpoint, step once to get back
|
||||||
|
to the crashing code.
|
||||||
|
|
||||||
|
Now you're in total control. You should be looking at the exact line that
|
||||||
|
gave you the crash last time. Print *every* variable on this line. Chances
|
||||||
|
are one of them will be a pointer to an unaccessable memory location. For
|
||||||
|
example, printing ch->player.name may give you an error. If it does, work
|
||||||
|
your way back and print ch->player to make sure that one's valid, and if it
|
||||||
|
isn't, try printing ch.
|
||||||
|
|
||||||
|
Somewhere in there you're going to have an invalid pointer. Once you know
|
||||||
|
which one it is, it's up to you to figure out why it's invalid. You may have
|
||||||
|
to move dummy() up higher in the code and step slowly, checking your pointer
|
||||||
|
all the way to see where it changes from valid to invalid. You may just
|
||||||
|
need to NULL a free'd pointer, or you may have to add a check for a NULL
|
||||||
|
pointer, or you may have screwed up a loop. I've done all that and more :)
|
||||||
|
|
||||||
|
Well, that's it in a nutshell. There's a lot more to GDB that I haven't
|
||||||
|
even begun to learn, but if you get comfortable with print and stepping you
|
||||||
|
can fix just about any bug. I spent hours on the above procedure trying to
|
||||||
|
get my ascii object and mail saving working right, but it could have taken
|
||||||
|
weeks without gdb. The only other suggestion I have is to check out the
|
||||||
|
online gdb help. It's not very helpful for learning, but you can see what
|
||||||
|
commands are available and play around with them to see if you can find any
|
||||||
|
new tools.
|
||||||
|
|
||||||
|
7 Profiling
|
||||||
|
|
||||||
|
Another useful technique is “profiling,” to find out where your program is
|
||||||
|
spending most of its time. This can help you to make a program more efficient.
|
||||||
|
|
||||||
|
Here is how to profile a program:
|
||||||
|
|
||||||
|
1. Remove all the .o files and the “circle” executable:
|
||||||
|
make clean
|
||||||
|
|
||||||
|
2. Edit your Makefile, and change the PROFILE=line:
|
||||||
|
PROFILE = -p
|
||||||
|
|
||||||
|
3. Remake circle:
|
||||||
|
make
|
||||||
|
|
||||||
|
4. Run circle as usual. Shutdown the game with the shutdown command when you
|
||||||
|
have run long enough to get a good profiling base under normal usage
|
||||||
|
conditions. If you crash the game, or kill the process externally, you won’t
|
||||||
|
get profiling information.
|
||||||
|
|
||||||
|
5. Run the profcommand:
|
||||||
|
prof bin/circle > prof.out
|
||||||
|
|
||||||
|
6. Read prof.out. Run “man prof” to understand the format of the output. For
|
||||||
|
advanced profiling, you can use “PROFILE = -pg” in step 2, and use the “gprof”
|
||||||
|
command in step 5. The “gprof” form of profiling gives you a report which lists
|
||||||
|
exactly how many times any function calls any other function. This information
|
||||||
|
is valuable for debugging as well as performance analysis.
|
||||||
|
|
||||||
|
Availability of “prof” and “gprof” varies from system to system. Almost every
|
||||||
|
Unix system has “prof”. Only some systems have “gprof”.
|
||||||
|
|
||||||
|
7 Books for Serious Programmers
|
||||||
|
|
||||||
|
Out of all the thousands of books out there, three stand out:
|
||||||
|
|
||||||
|
Kernighan and Plaugher, “The Elements of Programming Style”
|
||||||
|
Kernighan and Ritchie, “The C Programming Language”
|
||||||
|
Brooks, “The Mythical Man Month”
|
BIN
doc/files.pdf
BIN
doc/files.pdf
Binary file not shown.
133
doc/files.txt
Normal file
133
doc/files.txt
Normal file
|
@ -0,0 +1,133 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
tbaMUD File Manifest
|
||||||
|
|
||||||
|
The main ‘tbaMUD/’ directory has the following subdirectories and files:
|
||||||
|
|
||||||
|
autorun - Shell script to run the MUD (./autorun &).
|
||||||
|
FAQ - Frequently Aske Questions with answers.
|
||||||
|
README - Information for the new tbaMUDder.
|
||||||
|
changelog - A log of changes that can be added to and viewed in game.
|
||||||
|
syslog - The current system log. Also viewed in game with the file command.
|
||||||
|
bin/ - Directory of all the compiled programs (binaries).
|
||||||
|
doc/ - Documentation.
|
||||||
|
lib/ - MUD data.
|
||||||
|
log/ - System logs.
|
||||||
|
src/ - Source code.
|
||||||
|
|
||||||
|
The bin/directory contains only binaries: ‘circle’ (the main MUD) and its
|
||||||
|
utilities, which are described in utils.txt.
|
||||||
|
|
||||||
|
The doc/ directory has its own README file, describing the contents of each
|
||||||
|
of the documentation files.
|
||||||
|
|
||||||
|
etc/ - Files maintained by the game which you should not touch while the
|
||||||
|
game is running.
|
||||||
|
house/ - Crash-save files for player houses.
|
||||||
|
misc/ - Miscellaneous database files such as fight messages, invalid names,
|
||||||
|
and socials.
|
||||||
|
plrfiles/ - ASCII files which combined the player, alias, and variable files.
|
||||||
|
plrobjs/ - The hierarchy containing player object files (i.e. crash files,
|
||||||
|
rent files, cryo-rent files, etc.) and utility scripts.
|
||||||
|
text/ - Files meant to be directly read by players such as MOTD (message of
|
||||||
|
the day), help files, and the immortal handbook. You can change
|
||||||
|
these files while the game is running, and then have the mud reload
|
||||||
|
them using the reload command.
|
||||||
|
world/ - The hierarchy of the world files (mobiles, objects, shops, rooms,
|
||||||
|
triggers, and zones).
|
||||||
|
|
||||||
|
The lib/etc/ directory contains the following files (the MUD actively
|
||||||
|
maintains these files while it is running; they should not be modified
|
||||||
|
unless the game is down):
|
||||||
|
|
||||||
|
badsites - List of banned sites.
|
||||||
|
Board.<name> - Binary files with the contents of the bulletin boards.
|
||||||
|
config - Configuration file you can modify via CEDIT.
|
||||||
|
hcontrol - Binary file with the state of the house control system.
|
||||||
|
last - File storing information for the last command. Delete occasionally.
|
||||||
|
plrmail - Binary file containing player mail.
|
||||||
|
time - Where the MUD time is saved.
|
||||||
|
|
||||||
|
The lib/misc/ directory contains the following files:
|
||||||
|
|
||||||
|
bugs - Bugs reported by players with the ’bug’ command.
|
||||||
|
ideas - Ideas from players from ’idea’ command.
|
||||||
|
messages - Spell and skill damage messages.
|
||||||
|
socials - Text file with text of the socials.
|
||||||
|
socials.new - New format of socials you can edit via AEDIT.
|
||||||
|
typos - Typos reported by players with the ’typo’ command.
|
||||||
|
xnames - Text file of invalid names.
|
||||||
|
|
||||||
|
The lib/plrobjs/ contains the following files and directories:
|
||||||
|
|
||||||
|
a-e \
|
||||||
|
f-j \
|
||||||
|
k-o \ Subdirectories where player objects files are stored.
|
||||||
|
p-t /
|
||||||
|
u-z /
|
||||||
|
zzz/
|
||||||
|
|
||||||
|
The lib/plrfiles/ combined player, alias, and variable files in ASCII format.
|
||||||
|
|
||||||
|
a-e \
|
||||||
|
f-j \
|
||||||
|
k-o \ Subdirectories where player data is stored.
|
||||||
|
p-t /
|
||||||
|
u-z /
|
||||||
|
zzz/
|
||||||
|
|
||||||
|
The lib/text/ directory contains the following files:
|
||||||
|
|
||||||
|
background - Background story (for option 3 from main menu).
|
||||||
|
credits - Text for ’credits’ command.
|
||||||
|
greetings - Greeting message.
|
||||||
|
handbook - Text for Immortal Handbook (’handbook’ command).
|
||||||
|
immlist - Text for ’immlist’ command.
|
||||||
|
imotd - Immortal MOTD --seen by immortals on login.
|
||||||
|
info - Text for ’info’ command.
|
||||||
|
motd - MOTD --seen by mortals on login.
|
||||||
|
news - Text for ’news’ command.
|
||||||
|
policies - Text for ’policy’ command.
|
||||||
|
wizlist - Text for ’wizlist’ command.
|
||||||
|
/help/screen - Text for ’help’ command as a mortal with no arguments.
|
||||||
|
/help/iscreen - Text for ’help’ command an an immortal with no arguments.
|
||||||
|
|
||||||
|
The lib/world/directory contains the following subdirectories:
|
||||||
|
|
||||||
|
mob - Contains *.mob files (mobile files)
|
||||||
|
obj - Contains *.obj files (object files)
|
||||||
|
shp - Contains *.shp files (shop files)
|
||||||
|
trg - Contains *.trg files (trigger files)
|
||||||
|
wld - Contains *.wld files (world files)
|
||||||
|
zon - Contains *.zon files (zone files)
|
||||||
|
|
||||||
|
Each of the 6 subdirectories in the lib/world/ directory also contains two
|
||||||
|
additional files – one called ‘index’, which specifies which files in that
|
||||||
|
directory should be loaded when the MUD boots, and ‘index.mini’, which
|
||||||
|
specifies which files should be loaded if the MUD is booted with the -m
|
||||||
|
(mini-mud) option.
|
||||||
|
|
||||||
|
The log/ directory contains several files of the form syslog.n, where n is a
|
||||||
|
small number. These are the most recent tbaMUD syslogs. In addition, it
|
||||||
|
contains the following more permanent system logs:
|
||||||
|
|
||||||
|
badpws - Records of bad password attempts.
|
||||||
|
delete - Players who have self-deleted.
|
||||||
|
dts - Players who have hit death traps.
|
||||||
|
errors - MUD system errors ("SYSERR" messages).
|
||||||
|
godcmds - All logged god commands.
|
||||||
|
help - All help queries that are not found.
|
||||||
|
levels - Records of all levels gained by all players.
|
||||||
|
newplayers - Records of the creation of new players.
|
||||||
|
olc - OLC log messages.
|
||||||
|
rentgone - Players who have lost their items in rent.
|
||||||
|
restarts - List of times at which the MUD rebooted.
|
||||||
|
rip - Player deaths.
|
||||||
|
trigger - Trigedit log messages.
|
||||||
|
usage - Mud system usage (player load & memory usage info).
|
||||||
|
|
||||||
|
The src/ directory contains all of the C and header files for the MUD, along
|
||||||
|
with a Makefile. The src/util/ directory contains source for tbaMUD’s utility
|
||||||
|
programs. See admin.txt for more information on how to compile the MUD. See
|
||||||
|
utils.txt for more information on how to use tbaMUD’s utilities.
|
BIN
doc/hacker.pdf
BIN
doc/hacker.pdf
Binary file not shown.
BIN
doc/license.pdf
BIN
doc/license.pdf
Binary file not shown.
|
@ -237,3 +237,5 @@ If you make any major improvements on DikuMud we would be happy to
|
||||||
hear from you. As you will naturally honor the above rules, you will receive
|
hear from you. As you will naturally honor the above rules, you will receive
|
||||||
new updates and improvements made to the game.
|
new updates and improvements made to the game.
|
||||||
|
|
||||||
|
If you have any additions or corrections please stop by the Builder Academy at
|
||||||
|
telnet://tbamud.com:9091 or email: rumble@tbamud.com -- Rumble
|
BIN
doc/porting.pdf
BIN
doc/porting.pdf
Binary file not shown.
153
doc/porting.txt
Normal file
153
doc/porting.txt
Normal file
|
@ -0,0 +1,153 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
Porting tbaMUD to New Platforms
|
||||||
|
Originally by Jeremy Elson
|
||||||
|
|
||||||
|
tbaMUD is a very portable program by design, but is not guaranteed to run on
|
||||||
|
every platform that exists. This document is for experienced programmers
|
||||||
|
trying to make tbaMUD work on their platform.
|
||||||
|
|
||||||
|
tbaMUD should work on most UNIX platforms without any modifications; simply run
|
||||||
|
the “configure” script and it should automatically detect what type of system
|
||||||
|
you have and anything that may be strange about it. These findings are all
|
||||||
|
stored in a header file called conf.h which is created in the src directory
|
||||||
|
from a template called conf.h.in. A Makefile is also created from the template
|
||||||
|
Makefile.in.
|
||||||
|
|
||||||
|
Non-UNIX platforms are a problem. Some can’t run tbaMUD at all. However, any
|
||||||
|
multitasking OS that has an ANSI C compiler, and supports non-blocking I/O and
|
||||||
|
socket-based TCP/IP networking, should theoretically be able to run tbaMUD; for
|
||||||
|
example, OS/2, AmigaOS, Mac OS (Classic versions; Mac OS X supports tbaMUD’s
|
||||||
|
configure script from the command line), and all versions of Windows.
|
||||||
|
|
||||||
|
The port can be very easy or very difficult, depending mainly on whether or nor
|
||||||
|
your OS supports the Berkeley socket API.
|
||||||
|
|
||||||
|
The general steps for porting tbaMUD to a non-UNIX platform are listed below. A
|
||||||
|
number of tips for porting can be found after the porting steps. Note that we
|
||||||
|
have already ported tba to Windows, so if you’re confused as to how to perform
|
||||||
|
some of these steps, you can look at what we have done as an example (see the
|
||||||
|
files README.CYGWIN).
|
||||||
|
|
||||||
|
Note that you should not try to do this unless you are an experienced C
|
||||||
|
programmer and have a solid, working knowledge of the system to which you are
|
||||||
|
trying to port the code.
|
||||||
|
|
||||||
|
Porting the Code
|
||||||
|
|
||||||
|
Step 1. Create a “conf.h” file for your system. Copy the template “conf.h.in”
|
||||||
|
to “conf.h”, and then define or undefine each item as directed by the comments
|
||||||
|
and based on the characteristics of your system. To write the conf.h file,
|
||||||
|
you’ll need to know which header files are included with your system, the
|
||||||
|
return type of signals, whether or not your compiler supports the ‘const’
|
||||||
|
keyword, and whether or not you have various functions such as crypt()and
|
||||||
|
random(). Also, you can ignore the HAVE_LIBxxx and HAVE_xxx_PROTO constants at
|
||||||
|
the end of conf.h.in; they are not used in the code (they are part of UNIX
|
||||||
|
autoconf).
|
||||||
|
|
||||||
|
Step 2. Create a Makefile. Again, copy the template Makefile.in and make any
|
||||||
|
changes which may be appropriate for your system. Make sure to remove the @xxx@
|
||||||
|
variables such as @LIBS@, @CC@, @NETLIB@, etc., and replace them with the
|
||||||
|
appropriate values if necessary.
|
||||||
|
|
||||||
|
Step 3. Make the appropriate patches to the code so that the TCP/IP reads and
|
||||||
|
writes and signal handling are compatible with your system. This is the hardest
|
||||||
|
part of porting tbaMUD. All of the changes you will need to make will probably
|
||||||
|
be in the source file comm.c.
|
||||||
|
|
||||||
|
Step 4. Test your changes! Make sure that multiple people can log in
|
||||||
|
simultaneously and that they can all type commands at the same time. No player
|
||||||
|
should ever have a “frozen” screen just because another is waiting at a prompt.
|
||||||
|
Leave the MUD up for at least 24 hours, preferably with people playing it, to
|
||||||
|
make sure that your changes are stable. Make sure that automatic events such as
|
||||||
|
zone resets, point regeneration, and corpse decomposition are being timed
|
||||||
|
correctly (a tick should be about 75 seconds). Try resetting all the zones
|
||||||
|
repeatedly by typing “zr *” many times. Play the MUD and make sure that the
|
||||||
|
basic commands (killing mobs as a mortal, casting spells, etc.) work correctly.
|
||||||
|
|
||||||
|
Step 5. If you are satisfied that your changes work correctly, you are
|
||||||
|
encouraged to submit them to be included as part of the tbaMUD distribution so
|
||||||
|
that future releases of tbaMUD will support your platform. This prevents you
|
||||||
|
from re-porting the code every time a new version is released and allows other
|
||||||
|
people who use your platform to enjoy tbaMUD as well. To submit your changes
|
||||||
|
you must make a patch file using the GNU ‘diff’ program. diff will create a
|
||||||
|
patch file which can be later used with the ‘patch’ utility to incorporate
|
||||||
|
your changes into the stock tbaMUD distribution. For example, if you have a
|
||||||
|
copy of tbaMUD in the “stock-tba” directory, and your changes are in “my-tba”,
|
||||||
|
you can create a patch file like this:
|
||||||
|
|
||||||
|
diff -u --new-file --recursive stock-tba/src my-tba/src > patch
|
||||||
|
|
||||||
|
This will create a file called ‘patch’ with your patches. You should then try
|
||||||
|
to use the ‘patch’ program (the inverse of ‘diff’) on a copy of tbaMUD to make
|
||||||
|
sure that tbaMUD is correctly changed to incorporate your patches. This step is
|
||||||
|
very important: if you don’t create these patches correctly, your work will be
|
||||||
|
useless because no one will be able to figure out what you did! Make sure to
|
||||||
|
read the documentation to ‘diff’ and ‘patch’ if you don’t understand how to use
|
||||||
|
them. If your patches work, CELEBRATE!!
|
||||||
|
|
||||||
|
Step 6. Write a README file for your operating system that describes everything
|
||||||
|
that has to be done by another user of your operating system to get tbaMUD to
|
||||||
|
compile from scratch. You should include a section on required hardware,
|
||||||
|
software, compilers, libraries, etc. Also include detailed, step-by-step
|
||||||
|
instructions on how to compile and run everything. You can look at the other
|
||||||
|
README files in the distribution (README.CYGWIN, README.OS2, etc.) for examples
|
||||||
|
of what your README file should include.
|
||||||
|
|
||||||
|
Step 7. You are done! Congratulations! Mail your conf.h, Makefile, patches, and
|
||||||
|
README file to Rumble at <rumble@tbamud.com> so that they can be included in
|
||||||
|
future releases of tbaMUD. Please share your work so that other users can
|
||||||
|
benefit too.
|
||||||
|
|
||||||
|
3 Porting Tips
|
||||||
|
|
||||||
|
3.1 Making your own CIRCLE_system constant
|
||||||
|
Each system to which tba is already ported has a CIRCLE_xx constant associated
|
||||||
|
with it: CIRCLE_UNIX for plain vanilla UNIX tbaMUD, CIRCLE_WINDOWS for MS
|
||||||
|
Windows, CIRCLE_OS2 for IBM OS/2, and CIRCLE_AMIGA for the Amiga. You must use
|
||||||
|
a similar constant for your system. At the top of your conf.h, make sure to
|
||||||
|
comment out “#define CIRCLE_UNIX” and add “#define CIRCLE_YOUR_SYSTEM”.
|
||||||
|
|
||||||
|
3.2 ANSI C and GCC
|
||||||
|
As long as your system has an ANSI C compiler, all of the code (except for
|
||||||
|
comm.c) should compile with no major complaints. However, tbaMUD was written
|
||||||
|
using gcc, and some compilers are nitpicky about things that gcc does not care
|
||||||
|
about (and the other way around). Therefore, you are highly encouraged to use
|
||||||
|
gcc if at all possible. gcc has been ported to a very large number of
|
||||||
|
platforms, possibly including yours, and your port will be made much easier if
|
||||||
|
you use gcc.
|
||||||
|
|
||||||
|
3.3 Non-Blocking I/O
|
||||||
|
Make absolutely sure to use non-blocking I/O; i.e. make sure to enable the
|
||||||
|
option so that the read() system call will immediately return with an error if
|
||||||
|
there is no data available. If you do not use non-blocking I/O, read() will
|
||||||
|
“block,” meaning it will wait infinitely for one particular player to type
|
||||||
|
something even if other players are trying to enter commands. If your system
|
||||||
|
does not implement non-blocking I/O correctly, try using the
|
||||||
|
POSIX_NONBLOCK_BROKEN constant in sysdep.h.
|
||||||
|
|
||||||
|
3.4 Timing
|
||||||
|
tbaMUD needs a fairly precise (on the order of 5 or 10 ms) timer in order to
|
||||||
|
correctly schedule events such as zone resets, point regeneration (“ticks”),
|
||||||
|
corpse decomposition, and other automatic tasks. If your system supports the
|
||||||
|
select() system call with sufficient precision, the default timing code should
|
||||||
|
work correctly. If not, you’ll have to find out which system calls your system
|
||||||
|
supports for determining how much time has passed and replace the select()
|
||||||
|
timing method.
|
||||||
|
|
||||||
|
3.5 Signals and Signal Handlers
|
||||||
|
A note about signals: Most systems don’t support the concept of signals in the
|
||||||
|
same way that UNIX does. Since signals are not a critical part of how tbaMUD
|
||||||
|
works anyway (they are only used for updating the wizlist and some other
|
||||||
|
trivial things), all signal handling is turned off by default when compiling
|
||||||
|
under any non-UNIX platform (i.e. the Windows and Amiga ports do not use
|
||||||
|
signals at all.) Simply make sure that CIRCLE_UNIX is not defined in your
|
||||||
|
conf.h file and all signal code will be ignored automatically.
|
||||||
|
|
||||||
|
4 Final Note
|
||||||
|
IMPORTANT: Remember to keep any changes you make surrounded by #ifdef
|
||||||
|
statements (i.e. “#ifdef CIRCLE_WINDOWS ... #endif”). If you make absolutely
|
||||||
|
sure to mark all of your changes with #ifdef statements, then your patches
|
||||||
|
(once you get them to work) will be suitable for incorporation into the
|
||||||
|
tbaMUD distribution, meaning that tbaMUD will officially support your platform.
|
BIN
doc/release.pdf
BIN
doc/release.pdf
Binary file not shown.
148
doc/releases.txt
Normal file
148
doc/releases.txt
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
CircleMUD Release History
|
||||||
|
Originally by Jeremy Elson
|
||||||
|
|
||||||
|
Abstract
|
||||||
|
|
||||||
|
This document lists the release history of CircleMUD and at the end is the post
|
||||||
|
to rec.games.mud.diku which originally anounced CircleMUD as a publically
|
||||||
|
available MUD source code.
|
||||||
|
|
||||||
|
Release history:
|
||||||
|
Version 3.54 release: December, 2007
|
||||||
|
Version 3.53 release: July, 2007
|
||||||
|
Version 3.52 release: April, 2007
|
||||||
|
Version 3.51 release: February, 2007
|
||||||
|
Version 3.5 release: December, 2006
|
||||||
|
Version 3.1 (yes, no beta pl): November 18, 2002
|
||||||
|
Version 3.00 beta pl22 release: October 4, 2002
|
||||||
|
Version 3.00 beta pl21 release: April 15, 2002
|
||||||
|
Version 3.00 beta pl20 release: January 15, 2002
|
||||||
|
Version 3.00 beta pl19 release: August 14, 2001
|
||||||
|
Version 3.00 beta pl18 release: March 18, 2001
|
||||||
|
Version 3.00 beta pl17 release: January 23, 2000
|
||||||
|
Version 3.00 beta pl16 release: August 30, 1999
|
||||||
|
Version 3.00 beta pl15 release: March 16, 1999
|
||||||
|
Version 3.00 beta pl14 release: July 3, 1998
|
||||||
|
Version 3.00 beta pl13a release: June 4, 1998
|
||||||
|
Version 3.00 beta pl13 release: June 1, 1998
|
||||||
|
Version 3.00 beta pl12 release: October 29, 1997
|
||||||
|
Version 3.00 beta pl11 release: April 14, 1996
|
||||||
|
Version 3.00 beta pl10 release: March 11, 1996
|
||||||
|
Version 3.00 beta pl9 release: February 6, 1996
|
||||||
|
Version 3.00 beta pl8 release: May 23, 1995
|
||||||
|
Version 3.00 beta pl7 release: March 9, 1995
|
||||||
|
Version 3.00 beta pl6 release: March 6, 1995
|
||||||
|
Version 3.00 beta pl5 release: February 23, 1995
|
||||||
|
Version 3.00 beta pl4 release: September 28, 1994
|
||||||
|
Version 3.00 beta pl1-3, internal releases for beta-testers.
|
||||||
|
Version 3.00 alpha: Ran on net for testing. Code not released.
|
||||||
|
Version 2.20 release: November 17, 1993
|
||||||
|
Version 2.11 release: September 19, 1993
|
||||||
|
Version 2.10 release: September 1, 1993
|
||||||
|
Version 2.02 release: Late August 1993
|
||||||
|
Version 2.01 release: Early August 1993
|
||||||
|
Version 2.00 release: July 16, 1993 (Initial public release)
|
||||||
|
|
||||||
|
The CircleMUD ‘press release’ is included below, in case you haven’t seen it
|
||||||
|
and want to.
|
||||||
|
|
||||||
|
Wake the kids and find the dog, because it’s the FTP release of
|
||||||
|
|
||||||
|
CIRCLEMUD 2.0
|
||||||
|
|
||||||
|
That’s right --CircleMUD 2.0 is done and is now available for anonymous FTP
|
||||||
|
at ftp.cs.jhu.edu!
|
||||||
|
|
||||||
|
CircleMUD is highly developed from the programming side, but highly UNdeveloped
|
||||||
|
on the game-playing side. So, if you’re looking for a huge MUD with billions
|
||||||
|
of spells, skills, classes, races, and areas, Circle will probably disappoint
|
||||||
|
you severely. Circle still has only the 4 original Diku classes, the original
|
||||||
|
spells, the original skills, and about a dozen areas.
|
||||||
|
|
||||||
|
On the other hand, if you’re looking for a highly stable, well-developed,
|
||||||
|
well-organized "blank slate" MUD on which you can put your OWN ideas for
|
||||||
|
spells, skills, classes, and areas, then Circle might be just what you’re
|
||||||
|
looking for.
|
||||||
|
|
||||||
|
Just take a gander at some of Circle’s nifty features:
|
||||||
|
--In-memory mobile and object prototypes and string sharing for
|
||||||
|
decreased memory usage and blazingly fast zone resets
|
||||||
|
--All large realloc()s have been removed and replaced by boot-time
|
||||||
|
record counting and a single malloc() for superior memory efficiency
|
||||||
|
--Split world/obj/mob/zon/shp files for easy addition of areas; plus,
|
||||||
|
all the world files are still in the original Diku format for
|
||||||
|
compatibility with existing areas
|
||||||
|
--Boot-time and run-time error checking of most data files with
|
||||||
|
diagnostic messages a lot more helpful than "segmentation fault"!
|
||||||
|
--Player mail system and bank
|
||||||
|
--Rewritten board system: boards are now stable, robust, more
|
||||||
|
intelligent, and easily expandable --adding a new board is
|
||||||
|
as easy as adding another line to an array
|
||||||
|
--ANSI color codes with a fully documented programmers’ interface
|
||||||
|
--On-line system logs
|
||||||
|
--Optional automatically regenerating wizlist --a final end
|
||||||
|
to new immortals constantly asking you when they’ll be added
|
||||||
|
to the immlist!
|
||||||
|
--"config.c" file allows you to change aspects of the game such
|
||||||
|
as playerkilling/playerthieving legality, max number of objects
|
||||||
|
rentable, and nameserver usage --WITHOUT recompiling the
|
||||||
|
entire MUD!
|
||||||
|
--All text (help, mortal/immort MOTDs, etc.) is rebootable at
|
||||||
|
run-time with the "reboot" command
|
||||||
|
--All players are given a unique serial number --no more messy,
|
||||||
|
time consuming str_cmp()s when you’re trying to identify people!
|
||||||
|
--Fully integrated and robust rent/crash system --allows normal
|
||||||
|
renting, cryo-renting, crash protection, and forced rent
|
||||||
|
(at an increased price) after an hour of idling
|
||||||
|
--All the standard wizard stuff you’re used to: level-sensitive
|
||||||
|
invisibility, settable poofin/poofouts, wizline
|
||||||
|
--Advanced ’set’ command which allows you to set dozens of aspects
|
||||||
|
of players --even if they aren’t logged in! "Stat" also allows
|
||||||
|
you to stat people who aren’t logged in!
|
||||||
|
--Intelligent ’autorun’ script handles different types of reboots,
|
||||||
|
organizing your system logs, and more!
|
||||||
|
--Circle comes with more than a dozen utilities, all fully
|
||||||
|
documented, to make maintenance a snap!
|
||||||
|
--And much, much more!
|
||||||
|
|
||||||
|
Unfortunately, the original Circle had more than its fair share of Bad People
|
||||||
|
when it was alive, but it DID lead to an impressive list of security and
|
||||||
|
"asshole control" features:
|
||||||
|
--3 types of sitebanning available: ’all’ to refuse all connections,
|
||||||
|
’new’ to refuse new players, or ’select’ to refuse new players and
|
||||||
|
all registered players who don’t have a SITEOK flag.
|
||||||
|
--’wizlock’ allows you to close the game to all new players or all
|
||||||
|
players below a certain level.
|
||||||
|
--Handy ’mute’ command squelches a player off of all public
|
||||||
|
communication channels
|
||||||
|
--Handy ’freeze’ command freezes a player in his tracks: the MUD
|
||||||
|
totally ignores all commands from that player until he’s thawed.
|
||||||
|
--Even handier DELETE flag allows you to delete players on the fly.
|
||||||
|
--’set’ command (mentioned above) allows you to freeze/unfreeze/
|
||||||
|
delete/siteok/un-siteok players --even if they aren’t logged in!
|
||||||
|
--Bad password attempts are written to the system log and saved;
|
||||||
|
if someone tries to hack your account, you see "4 LOGIN FAILURES
|
||||||
|
SINCE LAST SUCCESSFUL LOGIN" next time you log on.
|
||||||
|
--Passwords don’t echo to the screen; allows 3 bad PW attempts
|
||||||
|
before disconnecting you.
|
||||||
|
--Players aren’t allowed to choose their character’s name as their
|
||||||
|
password --you’d be surprised how many do!
|
||||||
|
--"xnames" text file specifies a list of invalid name substrings
|
||||||
|
to prevent creation of characters with overly profane names.
|
||||||
|
Listen to all the rave reviews of CircleMUD 2.0!
|
||||||
|
"How long ago was that deadline you set for yourself?" --My Friend
|
||||||
|
"NO ONE should be denied the power of computation." --My Professor
|
||||||
|
|
||||||
|
"Multi-user WHAT?" --My Mom
|
||||||
|
Give it a try --what do you have to lose other than your GPA/job, friends,
|
||||||
|
and life?
|
||||||
|
|
||||||
|
Good luck, and happy Mudding,
|
||||||
|
|
||||||
|
Jeremy Elson aka Ras
|
||||||
|
|
||||||
|
Circle and tbaMUD’s complete source code and areas are available at
|
||||||
|
http://www.tbamud.com.
|
BIN
doc/socials.pdf
BIN
doc/socials.pdf
Binary file not shown.
168
doc/socials.txt
Normal file
168
doc/socials.txt
Normal file
|
@ -0,0 +1,168 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
A social is the easiest command to add to the game thanks to the social editor;
|
||||||
|
aedit. Socials serve as a means of expression among players, and have no effect
|
||||||
|
on gameplay itself (unless you make a trigger to fire off a social). Socials
|
||||||
|
can be used locally or globally with gemote.
|
||||||
|
|
||||||
|
HELP AEDIT
|
||||||
|
|
||||||
|
Syntax: aedit <social>
|
||||||
|
|
||||||
|
Aedit is an online action (social) editor that allows you to create socials
|
||||||
|
on the fly. Anyone can add new socials just ask a level 33 or above to set your
|
||||||
|
OLC to 999 and explain how it works. Use astat to see examples.
|
||||||
|
|
||||||
|
Here is the much coveted list of $ codes applicable to socials: There are six
|
||||||
|
different dollar-sign codes which can be inserted into the messages. Each is a
|
||||||
|
dollar-sign followed by a letter. If the letter is lowercase, the player using
|
||||||
|
the social is referenced. If the letter is capital, the target character is
|
||||||
|
referenced. The letter N inserts the character's name, an E inserts a subject
|
||||||
|
pronoun (he, she, it), an S inserts a possessive pronoun (his, hers, its), and
|
||||||
|
an M inserts an object pronoun (him, her, it).
|
||||||
|
|
||||||
|
$e he/she/it person doing social
|
||||||
|
$E he/she target of social
|
||||||
|
$m him/her person doing social
|
||||||
|
$M him/her target of social
|
||||||
|
$n char name person doing social (your name)
|
||||||
|
$N char name target of social (other persons name)
|
||||||
|
$s his/her/its person doing social
|
||||||
|
$S his/her target of social
|
||||||
|
$t body part of victim
|
||||||
|
$p object
|
||||||
|
|
||||||
|
See also: ASTAT, SOCIALS, AUTOSAVE
|
||||||
|
|
||||||
|
This is all you really need to know to make socials. Now if you want to edit
|
||||||
|
the socials file directly or understand the format in depth keep reading.
|
||||||
|
|
||||||
|
The file is formatted as follows:
|
||||||
|
|
||||||
|
<command> <command sort name> <hide flag> <min pos of vict> <min pos of char>
|
||||||
|
<min level>
|
||||||
|
<messg to character if no argument>
|
||||||
|
<messg to others if no argument>
|
||||||
|
<messg to char if victim not found>
|
||||||
|
<messg to char if vict is char>
|
||||||
|
<messg to others if vict is char>
|
||||||
|
<messg to char if victim found>
|
||||||
|
<messg to others if victim found>
|
||||||
|
<messg to victim>
|
||||||
|
<messg to char if body part found>
|
||||||
|
<messg to others if body part found>
|
||||||
|
<messg to victim if body part found>
|
||||||
|
<messg to char if object found>
|
||||||
|
<messagee to others if object found>
|
||||||
|
|
||||||
|
All socials are 14 lines followed by a blank line. After the blank line is
|
||||||
|
either the beginning of the next social or a dollar sign which marks the end of
|
||||||
|
the file. The first line of any social has six elements: the command name, the
|
||||||
|
abbreviated version of the command, the "hide-flag", the minimum position of the
|
||||||
|
victim, the min pos of the char (below), and the minimum level. that any victim
|
||||||
|
must be. The hide-flag is a Boolean value. If it is 0, the social is visible to
|
||||||
|
anyone in the room. If it is 1, the social is only visible to the character who
|
||||||
|
uses it and the character who is the "victim". Most such socials are only usable
|
||||||
|
on characters who are awake, meaning that they are either resting or more alert,
|
||||||
|
and so the minimum position value we will use is 5.
|
||||||
|
|
||||||
|
Positions:
|
||||||
|
Dead 0 = POS_DEAD
|
||||||
|
Mortally Wounded 1 = POS_MORTALLYW
|
||||||
|
Incapacitated 2 = POS_INCAP
|
||||||
|
Stunned 3 = POS_STUNNED
|
||||||
|
Sleeping 4 = POS_SLEEPING
|
||||||
|
Resting 5 = POS_RESTING
|
||||||
|
Sitting 6 = POS_SITTING
|
||||||
|
Fighting 7 = POS_FIGHTING
|
||||||
|
Standing 8 = POS_STANDING
|
||||||
|
|
||||||
|
The next 13 message lines contain the statements that will be shown to various
|
||||||
|
characters in certain conditions. The first line is the message sent to the
|
||||||
|
player who uses a social when the social has no argument. The second line
|
||||||
|
contains the message sent to others in the room when the social has no argument.
|
||||||
|
The third message is sent to the player using the social when the player names
|
||||||
|
a target, and that target is present in the room. The fourth message is sent to
|
||||||
|
others in the room under the same circumstances. The fifth message is sent to
|
||||||
|
the target character. The sixth message is sent to the player who uses the
|
||||||
|
social when the player supplies a target, and that target is not available. The
|
||||||
|
seventh message is sent to the player who uses the social when they player
|
||||||
|
supplies his or herself as a target. The eighth message is sent to others in
|
||||||
|
the room under the same circumstances. The remaining follow the same theme but
|
||||||
|
for body parts and objects. A pound sign in any message line means that there
|
||||||
|
is no message.
|
||||||
|
|
||||||
|
Keep in mind that "messages", "socials", and the world files are not part of
|
||||||
|
the source code, but rather are strictly data files. They are read by the game
|
||||||
|
at runtime and throughout the course of the game. Changes made to them do not
|
||||||
|
require recompiling the executable, they only need for the game to stop running
|
||||||
|
and be restarted. You can change information in these files at any time. In the
|
||||||
|
tbaMUD codebase the socials appear in alphabetical order in the file, but they
|
||||||
|
can appear in any order and can be rearranged if necessary. The socials file is
|
||||||
|
located in the lib/misc/ directory. Socials are all handled through the
|
||||||
|
generalized command do_action where the $ codes listed above are parsed.
|
||||||
|
|
||||||
|
Each social must contain the first two messages (if the social ignores
|
||||||
|
arguments), or all thirteen messages (if the social takes an argument). Each
|
||||||
|
message must be contained in one line. The command-name indicates which social
|
||||||
|
is being specified. The command sort name is the shortest part of the command a
|
||||||
|
player must type for it to match. The hide-flag can be either 0 or 1; if 1, the
|
||||||
|
social is hidden from OTHERS if they cannot see the character performing the
|
||||||
|
social. The action is not hidden from the VICTIM, even if s/he cannot see the
|
||||||
|
character performing the social, although in such cases the character’s name
|
||||||
|
will, of course, be replaced with “someone”. The min positions should be set to
|
||||||
|
dictate the minimum position a player must be in to target the victim and
|
||||||
|
perform the social. Min level allows you to further customize who can use what
|
||||||
|
socials.Where it makes sense to do so, text fields may be left empty. If
|
||||||
|
editing manually you should by put a ‘#’ in the first column on the line. Aedit
|
||||||
|
does this automatically.
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
A social only requires 2 message lines. This is the simplest form of a social.
|
||||||
|
|
||||||
|
~ack ack 0 0 0 0
|
||||||
|
ACK!
|
||||||
|
$n goes ACK!!
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
|
||||||
|
~lick lick 0 5 0 0
|
||||||
|
You lick your lips and smile.
|
||||||
|
$n licks $s lips and smiles.
|
||||||
|
You lick $M.
|
||||||
|
$n licks $N.
|
||||||
|
$n licks you.
|
||||||
|
Lick away, nobody's here with that name.
|
||||||
|
You lick yourself.
|
||||||
|
$n licks $mself -- YUCK.
|
||||||
|
You lick $S $t.
|
||||||
|
$n licks $N's $t.
|
||||||
|
$n licks your $t.
|
||||||
|
You lick $p.
|
||||||
|
$n licks $p.
|
||||||
|
|
||||||
|
~comfort com 0 5 5 0
|
||||||
|
Do you feel uncomfortable?
|
||||||
|
#
|
||||||
|
You comfort $M.
|
||||||
|
$n comforts $N.
|
||||||
|
$n comforts you.
|
||||||
|
Comfort who?
|
||||||
|
You make a vain attempt to comfort yourself.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#
|
||||||
|
You comfort $p.
|
||||||
|
$n comforts $p.
|
|
@ -1,11 +1,10 @@
|
||||||
There are many common errors that can be created by changing things in the
|
There are many common errors that can be created by changing things in the
|
||||||
code or having builders try inappropriate things. Here are a few, this is list
|
code or having builders try inappropriate things. Here are a few, this list
|
||||||
will be continually developed, if you have any additions or corrections please
|
will be continually developed. If you have any additions or corrections please
|
||||||
stop by the Builder Academy: builderacademy.net 9091
|
stop by the Builder Academy at telnet://tbamud.com:9091 or email:
|
||||||
|
rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
--Rumble
|
1. Errant Rooms (show error command)
|
||||||
|
|
||||||
1. Errant Rooms (show error)
|
|
||||||
2. SYSERR: Object # (oedit-s-desc) doesn't have drink type as last alias.
|
2. SYSERR: Object # (oedit-s-desc) doesn't have drink type as last alias.
|
||||||
3. SYSERR: Mob # both Aggressive and Aggressive_to_Alignment.
|
3. SYSERR: Mob # both Aggressive and Aggressive_to_Alignment.
|
||||||
4. SYSERR: Object # (oedit-s-desc) has out of range level #.
|
4. SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||||
|
@ -14,24 +13,27 @@ stop by the Builder Academy: builderacademy.net 9091
|
||||||
6. SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
6. SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||||
7. SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3).
|
7. SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3).
|
||||||
8. Char is already equipped: (medit-s-desc), (oedit-s-desc)
|
8. Char is already equipped: (medit-s-desc), (oedit-s-desc)
|
||||||
|
9. SYSERR: Attempt to assign spec to non-existant mob #
|
||||||
|
|
||||||
1: Errant Rooms
|
1: Errant Rooms
|
||||||
------------
|
------------
|
||||||
1: [ 1233] Rumble's Room
|
12: (Nowhere) [ 8868] House of Elders Chamber in Silverwood City (south)
|
||||||
|
|
||||||
The most common are exits to 0 (the void). This happens when a builder
|
The most common are exits to Nowhere. This happens when a builder
|
||||||
modifies a room exit but does not include an exit room vnum. These errant
|
modifies a room exit but does not include an exit room vnum. These errant
|
||||||
rooms are listed by the command 'show error' The fix is simple, remove the
|
rooms are listed by the command 'show error' The fix is simple, remove the
|
||||||
exit by purge exit in redit exit menu or by using 'dig <direction> -1'
|
exit by purge exit in redit exit menu or by using 'dig <direction> -1' A few
|
||||||
|
builders actually create exits to nowhere just so they can set the exit
|
||||||
|
descriptions. So only delete if there is no exit description.
|
||||||
|
|
||||||
2: SYSERR: Object # (oedit-s-desc) doesn't have drink type as last alias.
|
2: SYSERR: Object # (oedit-s-desc) doesn't have drink type as last alias.
|
||||||
|
|
||||||
Another common error is caused by how shop code handles drink containers
|
Another common error is caused by how shop code handles drink containers
|
||||||
poorly. In order for shops to display a jug as a jug of <drink type> they
|
poorly. In order for shops to display a jug as "a jug of <drink type>" they
|
||||||
must have the drink type as the last alias. It is good practice to put the
|
must have the drink type as the last alias. It is good practice to put the
|
||||||
drink type as the first and last word of an objects namelist (older verions
|
drink type as the first and last word of an objects namelist (older verions
|
||||||
of CircleMUD expect it first).
|
of CircleMUD expect it first and once the object is empty it removes one of
|
||||||
|
the drink aliases).
|
||||||
i.e. a shot of whisky should have the namelist: whisky shot whisky
|
i.e. a shot of whisky should have the namelist: whisky shot whisky
|
||||||
a cup of slime mold juice namelist should be: juice cup slime juice
|
a cup of slime mold juice namelist should be: juice cup slime juice
|
||||||
|
|
||||||
|
@ -44,21 +46,21 @@ to all.
|
||||||
|
|
||||||
4: SYSERR: Object # (oedit-s-desc) has out of range level #.
|
4: SYSERR: Object # (oedit-s-desc) has out of range level #.
|
||||||
|
|
||||||
A simple one. Limit spell levels to the levels available, on TBA that would
|
A simple one. Limit spell levels to the levels available, on tbaMUD that
|
||||||
be 1-34.
|
would be 1-34.
|
||||||
|
|
||||||
5: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
5: SYSERR: Object # (oedit-s-desc) has negative weight (-2147483644).
|
||||||
SYSERR: Object # (oedit-s-desc) has out of range level #2147483647.
|
SYSERR: Object # (oedit-s-desc) has out of range level #2147483647.
|
||||||
|
|
||||||
These are really annoying. This happens when you use numbers larger than
|
These are really annoying. This happens on older versions of CircleMUD when
|
||||||
necessary. This will actually crash many older versions of CircleMUD. Just do
|
you use numbers larger than necessary. This will actually crash many older
|
||||||
not do it. Use realistic numbers.
|
versions of CircleMUD. Just do not do it. Use realistic numbers.
|
||||||
|
|
||||||
6: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
6: SYSERR: Object # (oedit-s-desc) uses 'UNDEFINED' spell #.
|
||||||
|
|
||||||
There is no spell zero. Either select a spell or put -1 for none.
|
There is no spell zero. Either select a spell or put -1 for none.
|
||||||
|
|
||||||
7: SYSERR: Object # (oedit-s-desc) contains (5) more than maximum (3).
|
7: SYSERR: Object # (oedit-s-desc) contains (#) more than maximum (#).
|
||||||
|
|
||||||
When making a drink container you will set how much it initially contains
|
When making a drink container you will set how much it initially contains
|
||||||
on creation and the max it can hold if a player were to fill it. Common sense
|
on creation and the max it can hold if a player were to fill it. Common sense
|
||||||
|
@ -72,3 +74,13 @@ the initial amount.
|
||||||
a single location. HELP ZEDIT-EQUIP for all the possible object equipping
|
a single location. HELP ZEDIT-EQUIP for all the possible object equipping
|
||||||
locations. All you have to do to fix this is pick a different equip location
|
locations. All you have to do to fix this is pick a different equip location
|
||||||
that is not used.
|
that is not used.
|
||||||
|
|
||||||
|
9: SYSERR: Attempt to assign spec to non-existant mob #
|
||||||
|
|
||||||
|
To get rid of this "grep # spec_assign.c" and remove this assignment.
|
||||||
|
|
||||||
|
10: No associated object exists when attempting to create a board [vnum #].
|
||||||
|
|
||||||
|
You need to delete this board from lib/etc/boards/ and modify boards.c and
|
||||||
|
boards.h. Again "grep #" *.[ch] to search for this vnum in all of your .c and
|
||||||
|
.h files to remove the reference.
|
||||||
|
|
BIN
doc/utils.pdf
BIN
doc/utils.pdf
Binary file not shown.
148
doc/utils.txt
Normal file
148
doc/utils.txt
Normal file
|
@ -0,0 +1,148 @@
|
||||||
|
If you have any additions, corrections, ideas, or bug reports please stop by the
|
||||||
|
Builder Academy at telnet://tbamud.com:9091 or email rumble@tbamud.com -- Rumble
|
||||||
|
|
||||||
|
tbaMUD Utility Programs
|
||||||
|
Originally by Alex Fletcher
|
||||||
|
|
||||||
|
This document gives a brief summary of the various utility programs that come
|
||||||
|
with the tbaMUD distribution. The summaries include the description of the
|
||||||
|
utility, how it is called, and any caveats to watch out for when using them.
|
||||||
|
|
||||||
|
Contents
|
||||||
|
|
||||||
|
1 Conversion Utilities
|
||||||
|
|
||||||
|
1.1 shopconv
|
||||||
|
1.2 split
|
||||||
|
1.3 wld2html
|
||||||
|
1.4 webster
|
||||||
|
|
||||||
|
2 Maintenance Utilities
|
||||||
|
2.1 asciipasswd
|
||||||
|
2.2 sign
|
||||||
|
|
||||||
|
3 Informational Utilities
|
||||||
|
3.1 listrent
|
||||||
|
|
||||||
|
4 Internal Utilities
|
||||||
|
4.1 autowiz
|
||||||
|
|
||||||
|
1 Conversion Utilities
|
||||||
|
|
||||||
|
These utilities are generally one-time use utilities. Some are for converting
|
||||||
|
older CircleMUD data files to the versions used in CircleMUD v3, while others
|
||||||
|
are used to convert currently existing files into different formats.
|
||||||
|
|
||||||
|
Overall, these utilities have been created in an attempt to make the tbaMUD
|
||||||
|
administrator’s life a bit easier, and to give the administrator some ideas of
|
||||||
|
further and more grandiose utilities to create. Some are no longer applicable
|
||||||
|
but are retained as examples.
|
||||||
|
|
||||||
|
Please note that these utilities are not as rigorously tested as the rest of
|
||||||
|
the tbaMUD server, and you should be certain to backup your data before using
|
||||||
|
these utilities on it. Also note that the code layout and design for these
|
||||||
|
utilities is not as tight and as thought out as the rest of the source code
|
||||||
|
distributed with tbaMUD.
|
||||||
|
|
||||||
|
1.1 shopconv
|
||||||
|
The format of shops changed between CircleMUD 2.20 and CircleMUD v3. To make
|
||||||
|
the transition easier, Jeff Fink submitted a shop conversion utility, shopconv.
|
||||||
|
Similar to the player file converter, this should only be run against any file
|
||||||
|
once. It is best to run this immediately before the initial v2.20 to v3
|
||||||
|
changeover. The command line syntax for shopconvis as follows:
|
||||||
|
|
||||||
|
shopconv <file1> [<file2> .. <filen>]
|
||||||
|
|
||||||
|
where <file1>
|
||||||
|
is the first file to convert, <file2>
|
||||||
|
the second, and so forth.
|
||||||
|
|
||||||
|
1.2 split
|
||||||
|
The split utility is designed to split large world files into smaller, zone
|
||||||
|
sized files that are easier to manage and maintain. The utility reads its input
|
||||||
|
from the standard input and writes the output to files with names specified
|
||||||
|
within the larger world file. This is done by inserting ‘=filename’ into the
|
||||||
|
world file at the appropriate points, where filename is the name of the file
|
||||||
|
for the following section.
|
||||||
|
|
||||||
|
The command line syntax for splitis as follows:
|
||||||
|
|
||||||
|
split < [filename]
|
||||||
|
|
||||||
|
where [filename] is the file to redirect into the utility. The syntax above
|
||||||
|
indicates how to do this on platforms that support command line redirection.
|
||||||
|
|
||||||
|
1.3 wld2html
|
||||||
|
This utility began its life as a small toy written by Jeremy Elson to put a
|
||||||
|
CircleMUD world file on the world wide web. It converts the world file into a
|
||||||
|
series of HTML files, one per room, all named according to the virtual number
|
||||||
|
of the room, and linked via their exits.
|
||||||
|
|
||||||
|
The command line syntax for wld2htmlis as follows:
|
||||||
|
|
||||||
|
wld2html <wldfile>
|
||||||
|
|
||||||
|
where <wldfile>
|
||||||
|
is the world file to be turned into web pages.
|
||||||
|
|
||||||
|
|
||||||
|
2 Maintenance Utilities
|
||||||
|
|
||||||
|
2.1 asciipasswd
|
||||||
|
This utility generates hashed passwords for ASCII player files.
|
||||||
|
|
||||||
|
2.2 sign
|
||||||
|
This utility allows you to display some static text on a port when anyone
|
||||||
|
connects to it. This is useful when the mud server is moving, changing ports,
|
||||||
|
or is down for maintenance.
|
||||||
|
|
||||||
|
The command line syntax for signis as follows:
|
||||||
|
|
||||||
|
sign <port> <filename | -(for stdin)>
|
||||||
|
|
||||||
|
where <port>
|
||||||
|
is the tcp port to put the information on. This is usually the same as the mud
|
||||||
|
server port (when the server is not running), which defaults to 4000. The
|
||||||
|
<filename> is an ASCII file to display on the port when a connection is made
|
||||||
|
to it. If -is specified as a filename, the utility will wait for you to enter
|
||||||
|
the text to be displayed and will take in all text until ended by an EOF marker
|
||||||
|
(ctrl-D on Unix based systems).
|
||||||
|
|
||||||
|
|
||||||
|
3 Informational Utilities
|
||||||
|
|
||||||
|
3.1 listrent
|
||||||
|
This utility allows you to view player rent files offline. It displays the type
|
||||||
|
of rent; Rent, Crash, Cryo, or lost link (TimedOut). It also displays the
|
||||||
|
object vnum and first keyword.
|
||||||
|
|
||||||
|
The command line syntax for listrentis as follows:
|
||||||
|
|
||||||
|
listrent <objfile1> [<objfile2> .. <objfilen>]
|
||||||
|
|
||||||
|
where <objfile1>
|
||||||
|
is the first object file to view, <objfile2> the second, and so forth.
|
||||||
|
|
||||||
|
This utility must be recompiled if you make any changes to the rent file
|
||||||
|
structure.
|
||||||
|
|
||||||
|
|
||||||
|
4 Internal Utilities
|
||||||
|
|
||||||
|
4.1 autowiz
|
||||||
|
This utility is called from within the tbaMUD server and manages the self
|
||||||
|
updating Wizlist and Immlist. At this point, it only works on Unix-based
|
||||||
|
systems, but a solution for all other systems is being designed. If you wish
|
||||||
|
to change the text in the headers of the Wizlist or the Immlist, this is
|
||||||
|
the utility to edit.
|
||||||
|
|
||||||
|
The command line syntax for autowizis as follows:
|
||||||
|
|
||||||
|
autowiz <wizlev> <wizlistfile> <immlev> <immlistfile> [pid to signal]
|
||||||
|
|
||||||
|
where <wizlev> is equal to whatever LVL_GOD is set to in your tbaMUD server,
|
||||||
|
<wizlistfile> is the filename for the file containing the game’s Wizlist.
|
||||||
|
<immlev> should be set to your game’s LVL_IMMORT, while <immlistfile>
|
||||||
|
is the name of the Immlist file.
|
||||||
|
|
||||||
|
This utility must be recompiled if you make any changes to the player file structure.
|
28
lib/README
28
lib/README
|
@ -1,28 +0,0 @@
|
||||||
Getting To Know Your "lib" Directory
|
|
||||||
------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
etc/ Files maintained by the game which you should not touch while
|
|
||||||
the game is running.
|
|
||||||
|
|
||||||
house/ Crash-save files for player houses.
|
|
||||||
|
|
||||||
misc/ Miscellaneous database files such as fight messages, invalid names,
|
|
||||||
and socials.
|
|
||||||
|
|
||||||
plralias/ All of your player's aliases are stored here in the same
|
|
||||||
three letter encoding scheme as the plrobjs/ directory.
|
|
||||||
|
|
||||||
plrfiles/ ASCII player files.
|
|
||||||
|
|
||||||
plrobjs/ The hierarchy containing player object files (i.e. crash files,
|
|
||||||
rent files, cryo-rent files, etc.).
|
|
||||||
|
|
||||||
plrvars/ Trigger variables.
|
|
||||||
|
|
||||||
text/ Files meant to be directly read by players such as MOTD (message of
|
|
||||||
the day), help files, and the immortal handbook. You can change
|
|
||||||
these files while the game is running, and then have the mud re-read
|
|
||||||
them using the 'reboot' command.
|
|
||||||
|
|
||||||
world/ The hierarchy of the world files (mobiles, objects, shops, rooms,
|
|
||||||
triggers, and zones).
|
|
|
@ -1 +0,0 @@
|
||||||
This directory is to save objects in player houses.
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Purging $1"
|
|
||||||
cd $1
|
|
||||||
date >> deleted
|
|
||||||
../../../bin/delobjs ../../etc/players *.objs >> ../deleted
|
|
||||||
cd ..
|
|
|
@ -1,10 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
echo "Purging old rent files, please wait..."
|
|
||||||
purgedir A-E
|
|
||||||
purgedir F-J
|
|
||||||
purgedir K-O
|
|
||||||
purgedir P-T
|
|
||||||
purgedir U-Z
|
|
||||||
rm -f ZZZ/*
|
|
||||||
echo "Done."
|
|
|
@ -1,7 +0,0 @@
|
||||||
#!/bin/sh
|
|
||||||
|
|
||||||
../../bin/listrent A-E/* | fgrep -i $1
|
|
||||||
../../bin/listrent F-J/* | fgrep -i $1
|
|
||||||
../../bin/listrent K-O/* | fgrep -i $1
|
|
||||||
../../bin/listrent P-T/* | fgrep -i $1
|
|
||||||
../../bin/listrent U-Z/* | fgrep -i $1
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
|
@ -1 +0,0 @@
|
||||||
This is a placeholder file so the directory will be created
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,6 +0,0 @@
|
||||||
commands.hlp
|
|
||||||
info.hlp
|
|
||||||
socials.hlp
|
|
||||||
spells.hlp
|
|
||||||
wizhelp.hlp
|
|
||||||
$
|
|
|
@ -1,6 +0,0 @@
|
||||||
commands.hlp
|
|
||||||
info.hlp
|
|
||||||
socials.hlp
|
|
||||||
spells.hlp
|
|
||||||
wizhelp.hlp
|
|
||||||
$
|
|
|
@ -1,421 +0,0 @@
|
||||||
AC
|
|
||||||
|
|
||||||
"AC" is your armor class. It is a number from -10 to 10, roughly
|
|
||||||
defined as follows:
|
|
||||||
|
|
||||||
|
|
||||||
AC Roughly equivalent to
|
|
||||||
-----------------------------------------------------------
|
|
||||||
10 Naked person
|
|
||||||
0 Very Heavily armored (Plate mail, and "two shields")
|
|
||||||
-10 Armored battle tank
|
|
||||||
|
|
||||||
The score command displays your armor class as a number such as 78/10;
|
|
||||||
this means 78 on a scale from -100 to 100 (i.e., 7.8 on the scale from
|
|
||||||
-10 to 10.)
|
|
||||||
|
|
||||||
See also: SCORE
|
|
||||||
#
|
|
||||||
AREAS
|
|
||||||
|
|
||||||
This is a listing of the areas available for exploration on this
|
|
||||||
CircleMUD.
|
|
||||||
|
|
||||||
Limbo -- DikuMud
|
|
||||||
River Island Of Minos -- Mahatma of HexOynx
|
|
||||||
God Simplex -- CircleMUD, modified by Taz of Tazmania
|
|
||||||
The Straight Path -- Steppin of ChicagoMUD
|
|
||||||
The High Tower Of Magic -- Skylar of SillyMUD*
|
|
||||||
Midgaard -- DikuMud
|
|
||||||
The Three Of Swords -- C.A.W.
|
|
||||||
Miden'Nir -- Copper II, modified by VampLestat of MercMUD*
|
|
||||||
The Chessboard -- Exxon of SillyMUD
|
|
||||||
Mount Moria -- Redferne of DikuMud*
|
|
||||||
The Great Eastern Desert -- Rorschach
|
|
||||||
The Drow City -- Rorschach
|
|
||||||
The City Of Thalos -- Rorschach
|
|
||||||
The Great Pyramid -- Andersen of HexOynx*
|
|
||||||
New Thalos -- Duke Of SillyMUD*
|
|
||||||
The Haon-Dor Forest -- Quifael of DikuMud, extended by by Derkhil
|
|
||||||
of CircleMUD
|
|
||||||
The Orc Enclave -- C.A.W.
|
|
||||||
Arachnos -- Mahatma of HexOynx
|
|
||||||
Rand's Tower -- C.A.W.
|
|
||||||
The Dwarven Kingdom -- Depeche of DikuMud
|
|
||||||
The Sewers -- Redferne of DikuMud
|
|
||||||
Redferne's Residence -- DikuMud, modified by Cyron of VieMud
|
|
||||||
Rome -- Onivel of JediMUD
|
|
||||||
King Welmar's Castle -- CircleMUD*
|
|
||||||
Newbie Zone -- Maynard of StrangeMUD
|
|
||||||
|
|
||||||
All those marked with * have been heavily modified by Furry of VieMud
|
|
||||||
C.A.W. stands for the Curious Areas Workshop. For more information
|
|
||||||
mail <fletchra@qsilver.queensu.ca>.
|
|
||||||
|
|
||||||
See also: CREDITS
|
|
||||||
#
|
|
||||||
BOARDS
|
|
||||||
|
|
||||||
Bulletin boards are the forum of inter-player communication on the MUD.
|
|
||||||
There are different bulletin boards for different purposes -- for example,
|
|
||||||
a standard mortal board, a board for immortals, a board for fun "social"
|
|
||||||
messages, etc. Naturally, not all players may be allowed to read all
|
|
||||||
types of boards.
|
|
||||||
|
|
||||||
Type "LOOK BOARD" to see the messages already posted on a board. Type
|
|
||||||
"WRITE <subject>" to post a message to a board; terminate a message with
|
|
||||||
a '@' as the first character on a line. Type "READ <number>" to read a
|
|
||||||
post. Type "REMOVE <number>" to remove your own messages.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> look at board
|
|
||||||
> write Am I using these boards correctly?
|
|
||||||
[writes the message; terminates with a '@']
|
|
||||||
> look at board
|
|
||||||
> read 6
|
|
||||||
> remove 6
|
|
||||||
|
|
||||||
See also: MAIL, READ, WRITE
|
|
||||||
#
|
|
||||||
CLERIC
|
|
||||||
|
|
||||||
Clerics have an ancient belief in not carrying sharp weapons. Hence, they can
|
|
||||||
only wield bludgeoning weapons. This class gives you the wisdom of peace,
|
|
||||||
blessing and healing, though it is possible to learn more violent spells.
|
|
||||||
|
|
||||||
You can improve your spells by using the practice command.
|
|
||||||
|
|
||||||
See 'help spells' for a list of spells available.
|
|
||||||
|
|
||||||
See also: PRACTICE, SPELLS
|
|
||||||
#
|
|
||||||
EXPERIENCE XP
|
|
||||||
|
|
||||||
Whenever you kill a monster or a player, you earn experience points. When
|
|
||||||
enough experience points are earned, you raise a level.
|
|
||||||
Things you should know about experience points:
|
|
||||||
|
|
||||||
* When damaging a monster, you get experience points.
|
|
||||||
|
|
||||||
* If you kill a monster of higher level than yourself, you get bonus
|
|
||||||
experience points. If killing a monster of lower level you'll gain
|
|
||||||
less experience points
|
|
||||||
|
|
||||||
See also: GROUP, SCORE
|
|
||||||
#
|
|
||||||
FLAGS
|
|
||||||
|
|
||||||
Players sometimes have FLAGS after their names in the WHO list. These
|
|
||||||
flags are always in parentheses, not brackets or braces.
|
|
||||||
|
|
||||||
FLAG MEANING
|
|
||||||
----------- ---------------------------------------------------------
|
|
||||||
(KILLER) Player is trying to kill other players. That means you
|
|
||||||
can try to kill him/her without being flagged.
|
|
||||||
(THIEF) Player is trying to steal from other players. Fire away.
|
|
||||||
(invis) Player is invisible; you can see him/her because you are
|
|
||||||
sensitive to the presence of invisible things.
|
|
||||||
(writing) Player is writing on the board; do not disturb.
|
|
||||||
(mailing) Player is writing mail; do not disturb.
|
|
||||||
(deaf) Player has chosen not to hear shouts.
|
|
||||||
(notell) Player has chosen not to accept tells.
|
|
||||||
(quest) Player is participating in a quest currently being run by
|
|
||||||
the Gods.
|
|
||||||
|
|
||||||
See also: NOSHOUT, NOTELL, QUEST, STEAL, VISIBLE
|
|
||||||
#
|
|
||||||
GUILD
|
|
||||||
|
|
||||||
The Guildhouse is the place where mortals may go to escape the troubles and
|
|
||||||
perils of a cruel world. Each guild is heavily guarded, so that only members
|
|
||||||
may enter the building. Guilds are also the places where people come to
|
|
||||||
learn and practice the skills of their trade.
|
|
||||||
|
|
||||||
See also: PRACTICE
|
|
||||||
#
|
|
||||||
HOUSES
|
|
||||||
|
|
||||||
Houses have been implemented as of CircleMUD 3.0. A house entails two things:
|
|
||||||
access control and crash protection. Only you and your guests will be allowed
|
|
||||||
to enter the house. Your house will be crash-saved every five minutes. You
|
|
||||||
can force your house to save by typing 'save' while standing in your house.
|
|
||||||
In the event of a crash, the objects in your house as of the last crash-save
|
|
||||||
will be loaded back into your house when the MUD reboots. Also, if you own
|
|
||||||
a house, and quit from the game while standing in your house, you will be
|
|
||||||
loaded into your house next time you enter the game.
|
|
||||||
|
|
||||||
Guests of your house can be defined using the HOUSE command. See HOUSE for
|
|
||||||
more information.
|
|
||||||
|
|
||||||
Houses are an alternative to renting. You can simply enter your house and
|
|
||||||
quit; your objects will drop to the ground and be crash-saved for when you
|
|
||||||
return. There is currently no limit to the number of objects which can be
|
|
||||||
stored in your house. Of course, players must expect to pay a much higher
|
|
||||||
premium for the convenience of houses; contact your local Implementor for
|
|
||||||
a fee schedule.
|
|
||||||
|
|
||||||
See also: HOUSE
|
|
||||||
#
|
|
||||||
IMPLEMENTOR
|
|
||||||
|
|
||||||
The most powerful being in existence.
|
|
||||||
#
|
|
||||||
INN INNS CRYOGENIC CRYO RECEPTION
|
|
||||||
|
|
||||||
Inns are places where the weary traveler may rest while the innkeeper looks
|
|
||||||
after his equipment and treasure.
|
|
||||||
|
|
||||||
Specifically, the game will save your equipment while you are logged out.
|
|
||||||
There is a daily cost for renting, based on your equipment. Each item has
|
|
||||||
a per diem charge. The per diem charge is calculated to the nearest second,
|
|
||||||
however -- if you rent at the rate of 2400 coins per day, and you come back
|
|
||||||
39 hours later, you will be charged 3900 coins.
|
|
||||||
|
|
||||||
A CRYOGENIC CENTER will store your items for a one-time charge of four
|
|
||||||
days rent.
|
|
||||||
|
|
||||||
Rent files are deleted if you run out of money to pay the per diem charges
|
|
||||||
or after 30 days. Cryogenic-rent files are deleted after 60 days.
|
|
||||||
|
|
||||||
See also: OFFER, RENT
|
|
||||||
#
|
|
||||||
LINK
|
|
||||||
|
|
||||||
A lot of players have problems with their links to the game. This can be
|
|
||||||
very hazardous to your health in the middle of a battle, of course.
|
|
||||||
|
|
||||||
I. If your link is broken, you will automatically attempt to flee each
|
|
||||||
time someone attempts to hit you. If you manage to flee, then you
|
|
||||||
will be saved by divine forces, and put in a safe place until you
|
|
||||||
reconnect to the game.
|
|
||||||
|
|
||||||
II. If your link jams (freezes), you have a problem. The only solution we
|
|
||||||
can give is that you break your link as quickly as possible. By
|
|
||||||
breaking the link you can hope that the above procedure is initiated.
|
|
||||||
|
|
||||||
Do not try to get out of a fight by breaking link. You will be not
|
|
||||||
reimbursed for any experience or equipment if you purposefully
|
|
||||||
cut your link.
|
|
||||||
#
|
|
||||||
"MAGIC USER" WIZARD MAGE
|
|
||||||
|
|
||||||
This is the class of powerful and violent magic, but the magic user do not
|
|
||||||
control the nature, and can therefore not bless and such.
|
|
||||||
|
|
||||||
You can improve your spells by using the practice command.
|
|
||||||
|
|
||||||
See 'help spells' for a list of spells available.
|
|
||||||
|
|
||||||
See also: PRACTICE, SPELLS
|
|
||||||
#
|
|
||||||
MANA
|
|
||||||
|
|
||||||
Mana is used when casting spells. You must have a certain amount of mana
|
|
||||||
in order to cast any particular spell. If you do not have enough mana to
|
|
||||||
cast the spell you must rest until you gain enough points to cast.
|
|
||||||
|
|
||||||
See also: SPELLS
|
|
||||||
#
|
|
||||||
MIDGAARD MAP
|
|
||||||
|
|
||||||
Temple Altar
|
|
||||||
|
|
|
||||||
|
|
|
||||||
Reading -- Temple -- Donations
|
|
||||||
Room of
|
|
||||||
Midgaard Post Reception
|
|
||||||
| Office /
|
|
||||||
Cleric | | /
|
|
||||||
Guild----Temple Square----Grunting---Bar
|
|
||||||
(Fountain) Boar Inn
|
|
||||||
Magic |
|
|
||||||
Shop Bakery | Grocer Weaponsmith
|
|
||||||
| | | | | East
|
|
||||||
<---West-----+------+----Market----+--------+--------Gate--->
|
|
||||||
Gate | | Square | | |
|
|
||||||
| Mage Armory | Pet Warrior Wally's
|
|
||||||
(Wall Guild | Shop Guild World of Water
|
|
||||||
Road) |
|
|
||||||
| | Uncle Juans's
|
|
||||||
| | |
|
|
||||||
+-(Poor-Alley)-+----Square----+(Dark-Alley)-------+
|
|
||||||
| | | | | |
|
|
||||||
| Grubby | Thieves Levee Warehouse
|
|
||||||
| Inn | Guild |
|
|
||||||
(Wall Dump |
|
|
||||||
Road) Sewers/ |
|
|
||||||
| |
|
|
||||||
| Midgaard
|
|
||||||
<=== [Bridge] =============================== River =============>
|
|
||||||
|
|
|
||||||
|
|
|
||||||
+(Concourse)+------------+-------------+----------+
|
|
||||||
| | | | |
|
|
||||||
| + +----Cafe +---Penny |
|
|
||||||
| | Park--v | | Lane |
|
|
||||||
| City | +--+--+ | |
|
|
||||||
| Guard----+----+----+--o--+-----+----+---City |
|
|
||||||
| HQ | | Hall |
|
|
||||||
| + +--(Emerald)--+ |
|
|
||||||
(Concourse) | | (Concourse)
|
|
||||||
| +------(Park-+-Road)-------+ |
|
|
||||||
| | | |
|
|
||||||
| +--(Emerald)-+ +---Elm |
|
|
||||||
| | | Street |
|
|
||||||
| + + |
|
|
||||||
| | | |
|
|
||||||
+-----------+------(Concourse)---------+----------+
|
|
||||||
|
|
|
||||||
Graveyard
|
|
||||||
Entrance
|
|
||||||
#
|
|
||||||
SHOPS
|
|
||||||
|
|
||||||
Shops are places where the adventurer may purchase equipment for his quests,
|
|
||||||
and where he may sell his treasure if he should manage to survive the perils
|
|
||||||
with his life and sanity intact. Many shops trade only in a specific type of
|
|
||||||
merchandise. Thus, a baker may well refuse to buy your armor, even if it is
|
|
||||||
of high quality!
|
|
||||||
|
|
||||||
To some people, the prospect of obtaining the entire inventory of a shop by
|
|
||||||
murdering the keeper may appear tempting - but beware: The shopkeepers are
|
|
||||||
often rugged, capable men; roughened by years of trading and, indeed, surviving
|
|
||||||
in a world where the only safe prospect is death in the end.
|
|
||||||
|
|
||||||
See also: BUY, SELL, LIST, VALUE
|
|
||||||
#
|
|
||||||
SPELL SPELLS
|
|
||||||
|
|
||||||
Magic User Cleric
|
|
||||||
|
|
||||||
(1) Magic Missile (1) Armor
|
|
||||||
(1) - (1) Cure Light
|
|
||||||
|
|
||||||
(2) Detect Magic (2) Create Water
|
|
||||||
(2) Detect Invisible (2) Create Food
|
|
||||||
|
|
||||||
(3) Chill Touch (3) Detect Poison
|
|
||||||
(3) Infravision (3) -
|
|
||||||
|
|
||||||
(4) Invisibility (4) Cure Blindness
|
|
||||||
(4) Armor (4) Detect Evil
|
|
||||||
(4) - (4) Detect Alignment
|
|
||||||
|
|
||||||
(5) Burning Hands (5) Bless
|
|
||||||
|
|
||||||
(6) Locate Object (6) Blindness
|
|
||||||
(6) Strength (6) Detect Invisible
|
|
||||||
|
|
||||||
(7) Shocking Grasp (7) Infravision
|
|
||||||
|
|
||||||
(8) Sleep (8) Protection From Evil
|
|
||||||
(8) - (8) Poison
|
|
||||||
|
|
||||||
(9) Lightning Bolt (9) Cure Critical
|
|
||||||
(9) Blindness (9) Group Armor
|
|
||||||
|
|
||||||
(10) Detect Poison (10) Summon
|
|
||||||
(10) - (10) Remove Poison
|
|
||||||
|
|
||||||
(11) Color Spray (11) -
|
|
||||||
|
|
||||||
(12) - (12) Earthquake
|
|
||||||
(12) - (12) Word of Recall
|
|
||||||
|
|
||||||
(13) Energy Drain (13) -
|
|
||||||
|
|
||||||
(14) Curse (14) Detect Evil
|
|
||||||
(14) Poison (14) Detect Good
|
|
||||||
(14) - (14) Dispel Evil
|
|
||||||
(14) - (14) Dispel Good
|
|
||||||
|
|
||||||
(15) Fireball (15) Call Lightning
|
|
||||||
(15) - (15) Sanctuary
|
|
||||||
|
|
||||||
(16) Charm Person (16) Heal
|
|
||||||
|
|
||||||
(17) Sense Life (17) Control Weather
|
|
||||||
|
|
||||||
(19) - (19) Harm
|
|
||||||
|
|
||||||
(22) - (22) Group Heal
|
|
||||||
|
|
||||||
(26) Enchant Weapon (26) Remove Curse
|
|
||||||
#
|
|
||||||
THIEF THIEVES
|
|
||||||
|
|
||||||
Thieves are known to have very special qualities, that no other class offers.
|
|
||||||
Their specialty tends to be in the darker, sneakier art. Many of these
|
|
||||||
qualities can come in handy in many situations, such as picking locks.
|
|
||||||
|
|
||||||
You can improve you skills by using the practice command.
|
|
||||||
|
|
||||||
Skills available to thieves:
|
|
||||||
|
|
||||||
sneak, hide, steal, backstab, pick lock, track
|
|
||||||
|
|
||||||
See the help on each skill for more information.
|
|
||||||
|
|
||||||
See also: PRACTICE
|
|
||||||
#
|
|
||||||
WARRIOR FIGHTER
|
|
||||||
|
|
||||||
Warriors are known to have more strength than the average player. This makes
|
|
||||||
them better at hand-to-hand-combat, as they possess skills of violence and
|
|
||||||
fighting unequaled by the members of any other class. However, they lack the
|
|
||||||
ability to use magic of any sort.
|
|
||||||
|
|
||||||
You can improve your skills by using the practice command.
|
|
||||||
|
|
||||||
Skills available to warriors:
|
|
||||||
|
|
||||||
kick, rescue, track, bash
|
|
||||||
|
|
||||||
See also: PRACTICE
|
|
||||||
#
|
|
||||||
CIRCLE CIRCLEMUD CREDITS
|
|
||||||
C I R C L E M U D 3 . 0
|
|
||||||
|
|
||||||
CircleMUD was developed from DikuMud (Gamma 0.0) by Jeremy "Ras" Elson at
|
|
||||||
Johns Hopkins University's Department of Computer Science. All code unique
|
|
||||||
to CircleMUD is protected under a copyright by the Trustees of the Johns
|
|
||||||
Hopkins University.
|
|
||||||
|
|
||||||
Many, many people contributed to CircleMUD in one way or another throughout
|
|
||||||
the course of its development. Although it's impossible for me to remember
|
|
||||||
them all, I'd like to extend special thanks to certain people:
|
|
||||||
|
|
||||||
-- Jeff Fink and George Greer, for submitting a veritable mountain of
|
|
||||||
excellent code.
|
|
||||||
-- Chris Epler and Chris Herringshaw for extensive beta-testing and bug
|
|
||||||
reporting.
|
|
||||||
-- Furry (Alex Fletcher), for single-handedly managing Circle's world files.
|
|
||||||
-- Fred Merkel, Ryan Watkins, Jay Levino, and Sharon Goza, for other
|
|
||||||
code and area submissions.
|
|
||||||
-- Jean-Jack Riethoven for porting the code to the Amiga, David Carver
|
|
||||||
for porting it to OS/2, and Jack Patton and Steffen Haeuser for the
|
|
||||||
Amiga port.
|
|
||||||
-- Bill Bogstad and Tim Stearns for allowing Circle to exist at JHU.
|
|
||||||
-- The DikuMud folk, and the good old WhatMUD implementors Dave & Justin,
|
|
||||||
for starting the ball rolling.
|
|
||||||
-- Bryan Jolson, Steven Lacher, Cat Stanton, and Naved Surve, for being
|
|
||||||
there in the very early days of Circle's development.
|
|
||||||
-- Sharon, Ben, Erica, Aly, and Josh, for keeping me sane.
|
|
||||||
-- Jules (hamotek sheli) for being the greatest.
|
|
||||||
|
|
||||||
...plus everyone else in the Circle community who has submitted material!
|
|
||||||
Thanks everyone!
|
|
||||||
|
|
||||||
Anonymous FTP: ftp.circlemud.org or ftp2.circlemud.org in pub/CircleMUD
|
|
||||||
To report bugs: bugs@circlemud.org
|
|
||||||
To get help: help@circlemud.org
|
|
||||||
URL: http://www.circlemud.org/
|
|
||||||
Mailing List: listserv@post.queensu.ca
|
|
||||||
(write "subscribe circle <first name> <last name>")
|
|
||||||
|
|
||||||
--Jeremy Elson (jelson@circlemud.org)
|
|
||||||
|
|
||||||
See also: AREAS
|
|
||||||
#
|
|
||||||
$
|
|
|
@ -1,35 +0,0 @@
|
||||||
FRENCH
|
|
||||||
|
|
||||||
Don't you know how they kiss in France?? -- try it!
|
|
||||||
#
|
|
||||||
KISS
|
|
||||||
|
|
||||||
Well can't you guess?
|
|
||||||
#
|
|
||||||
SMILE
|
|
||||||
|
|
||||||
Whenever you feel like smiling...
|
|
||||||
#
|
|
||||||
SOCIALS
|
|
||||||
|
|
||||||
Usage: <social> [<victim>]
|
|
||||||
|
|
||||||
Socials are commands used to show your affective state to others. The
|
|
||||||
actor, victim and bystanders may receive different messages. Generally,
|
|
||||||
social commands are used only to express emotion and not to take action,
|
|
||||||
but it is possible that some mobs (or players) will take action based on
|
|
||||||
the social. (Slap a dragon lately?)
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> shake homer
|
|
||||||
> applaud marge
|
|
||||||
> stare
|
|
||||||
|
|
||||||
The SOCIALS command generates a canonical listing of all available socials.
|
|
||||||
|
|
||||||
> socials
|
|
||||||
|
|
||||||
See also: EMOTE
|
|
||||||
#
|
|
||||||
$
|
|
|
@ -1,557 +0,0 @@
|
||||||
ARMOR
|
|
||||||
|
|
||||||
Usage : cast 'armor' [target]
|
|
||||||
Accumulative: No
|
|
||||||
Duration : 24 Hours
|
|
||||||
Level : Mage level 4, Cleric level 1.
|
|
||||||
|
|
||||||
The Armor spell will improve your AC by 2.
|
|
||||||
|
|
||||||
See also: AC
|
|
||||||
#
|
|
||||||
BLESS
|
|
||||||
|
|
||||||
Usage : cast 'bless' <victim | object>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : 6 Hours, permanent for objects.
|
|
||||||
Level : Cleric level 5.
|
|
||||||
|
|
||||||
Bless on a victim will improve the victims saving throw versus spells
|
|
||||||
by 1, and furthermore improve the hitroll by 2.
|
|
||||||
|
|
||||||
Bless on an item currently has no defined action. It is only possible
|
|
||||||
to bless non-evil items, and the object blessed may weigh no more
|
|
||||||
than five pounds per level of caster.
|
|
||||||
#
|
|
||||||
BLINDNESS
|
|
||||||
|
|
||||||
Usage : cast 'blindness' <victim>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : 2 hours.
|
|
||||||
Level : Mage level 9, Cleric level 6.
|
|
||||||
|
|
||||||
Blindness will blind a victim failing its saving throw.
|
|
||||||
A blinded person will have -4 penalty to both hitroll and AC.
|
|
||||||
|
|
||||||
See also: AC
|
|
||||||
#
|
|
||||||
"BURNING HANDS"
|
|
||||||
|
|
||||||
Usage : cast 'burning hands' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 5.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell is more powerful than the chill touch spell.
|
|
||||||
|
|
||||||
See also: "CHILL TOUCH"
|
|
||||||
#
|
|
||||||
"CALL LIGHTNING"
|
|
||||||
|
|
||||||
Usage : cast 'call lightning' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 15.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell will use the "force of nature" to make a lightning
|
|
||||||
strike the victim. It is therefore only possible to call lightning
|
|
||||||
outside, and it has to be raining (or worse).
|
|
||||||
|
|
||||||
See also: "CONTROL WEATHER", WEATHER
|
|
||||||
#
|
|
||||||
CAST
|
|
||||||
|
|
||||||
Usage: cast '<spell name>' [target]
|
|
||||||
|
|
||||||
For "magical" people. If you want to throw a spell at someone or something.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> cast 'burning hands' <player>
|
|
||||||
Note that the name of the spell must be enclosed by "'"s.
|
|
||||||
|
|
||||||
See also: help on each individual spell:
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> help cure ligh
|
|
||||||
> help ventri
|
|
||||||
> help energy drain
|
|
||||||
#
|
|
||||||
"CHARM PERSON"
|
|
||||||
|
|
||||||
Usage : cast 'charm person' <victim>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : (432/Intelligence points of person) hours
|
|
||||||
Level : Mage level 16.
|
|
||||||
|
|
||||||
Is is not possible to charm anyone that is already charmed, if
|
|
||||||
you're charmed yourself, or if the person is higher level than
|
|
||||||
yourself. The person will get a saving throw versus "paralysation".
|
|
||||||
|
|
||||||
A charmed person will follow you, and not be able to attack you, you
|
|
||||||
can order the charmed person using the order command.
|
|
||||||
|
|
||||||
See also: FOLLOW, ORDER
|
|
||||||
#
|
|
||||||
"CHILL TOUCH"
|
|
||||||
|
|
||||||
Usage : cast 'chill touch' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 3.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell is more powerful than the magic missile spell.
|
|
||||||
A victim failing its saving throw will get its strength
|
|
||||||
reduced by one.
|
|
||||||
|
|
||||||
See also: "MAGIC MISSILE"
|
|
||||||
#
|
|
||||||
COLORSPRAY "COLOR SPRAY"
|
|
||||||
|
|
||||||
Usage : cast 'color spray' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 11.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell is more powerful than the lightning bolt spell.
|
|
||||||
|
|
||||||
See also: "LIGHTNING BOLT"
|
|
||||||
|
|
||||||
For help on actual color, see: ANSI
|
|
||||||
#
|
|
||||||
"CONTROL WEATHER"
|
|
||||||
|
|
||||||
Usage : cast 'control weather' <'better' | 'worse'>
|
|
||||||
Accumulative: Yes
|
|
||||||
Duration : -
|
|
||||||
Level : Cleric level 17.
|
|
||||||
|
|
||||||
This spell will change the "course" of the current weather.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> cast 'control wea' worse
|
|
||||||
#
|
|
||||||
"CREATE FOOD"
|
|
||||||
|
|
||||||
Usage : cast 'create food'
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 2.
|
|
||||||
|
|
||||||
This spell instantly creates a fresh waybread. The waybread will be
|
|
||||||
filling for the next (5+level) hours, up to a maximum of 24 hours.
|
|
||||||
|
|
||||||
See also: "CREATE WATER"
|
|
||||||
#
|
|
||||||
"CREATE WATER"
|
|
||||||
|
|
||||||
Usage : cast 'create water' <drink container>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 2.
|
|
||||||
|
|
||||||
Expect disastrous results if cast upon a drink container which contains
|
|
||||||
another liquid than water. Empty or water containers will be filled
|
|
||||||
depending on the level of the caster.
|
|
||||||
|
|
||||||
Double amount of water will be created if it is raining (or worse).
|
|
||||||
|
|
||||||
See also: "CREATE FOOD"
|
|
||||||
#
|
|
||||||
"CURE BLIND"
|
|
||||||
|
|
||||||
Usage : cast 'cure blind' <victim>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 4.
|
|
||||||
|
|
||||||
This spell will cure a person blinded by the "blindness" spell, it
|
|
||||||
can not remove blindness caused by for example cursed items.
|
|
||||||
#
|
|
||||||
"CURE CRITIC"
|
|
||||||
|
|
||||||
Usage : cast 'cure critic' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 9.
|
|
||||||
|
|
||||||
This spell cures 3d8+3 hitpoints of damage.
|
|
||||||
#
|
|
||||||
"CURE LIGHT"
|
|
||||||
|
|
||||||
Usage : cast 'cure light' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 1.
|
|
||||||
|
|
||||||
Cures minor wounds and scratches.
|
|
||||||
#
|
|
||||||
CURSE
|
|
||||||
|
|
||||||
Usage : cast 'curse' <victim | object>
|
|
||||||
Accumulative: Yes
|
|
||||||
Duration : 7 Days, permanent on objects.
|
|
||||||
Level : Mage level 14.
|
|
||||||
|
|
||||||
Curse cast on a person that fails the saving throw, will reduce their
|
|
||||||
hitroll and damage roll both by one. It will also reduce the saving
|
|
||||||
throw versus paralysation by one.
|
|
||||||
|
|
||||||
When cast upon an object, the object will become undropable.
|
|
||||||
#
|
|
||||||
"DETECT ALIGNMENT"
|
|
||||||
|
|
||||||
Usage : cast 'detect alignment'
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : 12 hours + level
|
|
||||||
Level : Cleric level 4.
|
|
||||||
|
|
||||||
Allows the caster to detect the alignment of those around them.
|
|
||||||
Evil will show as a red aura, good in a blue aura.
|
|
||||||
|
|
||||||
See also: "DETECT INVISIBILITY"
|
|
||||||
#
|
|
||||||
"DETECT INVISIBILITY"
|
|
||||||
|
|
||||||
Usage : cast 'detect invisibility' [self]
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : 12 hours + level/4
|
|
||||||
Level : Mage level 2, Cleric level 6.
|
|
||||||
|
|
||||||
This spell enables you to see invisible items and players.
|
|
||||||
#
|
|
||||||
"DETECT MAGIC"
|
|
||||||
|
|
||||||
Usage : cast 'detect magic' [self]
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : 12 hours + level
|
|
||||||
Level : Mage level 2.
|
|
||||||
|
|
||||||
This spell will let you see the magical aura surrounding magical
|
|
||||||
objects.
|
|
||||||
#
|
|
||||||
"DETECT POISON"
|
|
||||||
|
|
||||||
Usage : cast 'detect poison' <victim | food | drink>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 10, Cleric level 3.
|
|
||||||
|
|
||||||
Cast on food or drinks (drink containers) you will be able to
|
|
||||||
sense if it is poisoned.
|
|
||||||
|
|
||||||
Cast on a person you will be able to see if that person is
|
|
||||||
poisoned.
|
|
||||||
#
|
|
||||||
"DISPEL EVIL"
|
|
||||||
|
|
||||||
Usage : cast 'dispel evil' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 14.
|
|
||||||
Save : Special
|
|
||||||
|
|
||||||
This spell will only affect evil creatures. An evil person of level
|
|
||||||
equal or less than caster will suffer 100 damage points.
|
|
||||||
|
|
||||||
If the victim is higher level than caster, the spell will inflict
|
|
||||||
(caster_level)d4 damage points, saving throw versus half damage.
|
|
||||||
|
|
||||||
See also: DISPEL GOOD
|
|
||||||
#
|
|
||||||
"DISPEL GOOD"
|
|
||||||
|
|
||||||
Usage : cast 'dispel good' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 14.
|
|
||||||
Save : Special
|
|
||||||
|
|
||||||
This spell will only affect good creatures. A good person of level
|
|
||||||
equal or less than caster will suffer 100 damage points.
|
|
||||||
|
|
||||||
If the victim is higher level than caster, the spell will inflict
|
|
||||||
(caster_level)d4 damage points, saving throw versus half damage.
|
|
||||||
|
|
||||||
See also: DISPEL EVIL
|
|
||||||
#
|
|
||||||
EARTHQUAKE
|
|
||||||
|
|
||||||
Usage : cast 'earthquake'
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 12.
|
|
||||||
Save : -
|
|
||||||
|
|
||||||
This spell will damage everybody except the caster by
|
|
||||||
1d8+level_of_caster hitpoints.
|
|
||||||
#
|
|
||||||
"ENCHANT WEAPON"
|
|
||||||
|
|
||||||
Usage : cast 'enchant weapon' <weapon>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : Permanent
|
|
||||||
Level : Mage level 26.
|
|
||||||
|
|
||||||
This spell will enchant non-magical (non-modifying) weapons only.
|
|
||||||
By non-modifying weapons we refer to weapons that might alter any
|
|
||||||
ability such as for example damage. The only way to know if a weapon
|
|
||||||
is suitable for enchantment is to fully identify it.
|
|
||||||
|
|
||||||
The enchantment will modify the weapon as:
|
|
||||||
|
|
||||||
Level Hit Roll Damage
|
|
||||||
|
|
||||||
0..17 +1 +1
|
|
||||||
18..19 +2 +1
|
|
||||||
20..20+ +2 +2
|
|
||||||
#
|
|
||||||
"ENERGY DRAIN"
|
|
||||||
|
|
||||||
Usage : cast 'energy drain' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 13.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell does not give much damage, but victims failing their
|
|
||||||
saving throws will loose up to 40,000 XP points. You will gain
|
|
||||||
a quarter of this XP.
|
|
||||||
|
|
||||||
Beware that this spell is evil.
|
|
||||||
#
|
|
||||||
FIREBALL
|
|
||||||
|
|
||||||
Usage : cast 'fireball' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 15.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell is the most powerful spell a magic user can cast.
|
|
||||||
|
|
||||||
See also: "COLOR SPRAY"
|
|
||||||
#
|
|
||||||
HARM
|
|
||||||
|
|
||||||
Usage : cast 'harm' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 19.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell removes all but 1d4 hitpoints from the victim. The
|
|
||||||
maximum number of damage points are 100. It is not possible to
|
|
||||||
kill using this spell (but almost).
|
|
||||||
#
|
|
||||||
HEAL
|
|
||||||
|
|
||||||
Usage : cast 'heal' <victim>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 16.
|
|
||||||
|
|
||||||
Heal will heal all the hitpoints from a person, except 1d4 points.
|
|
||||||
Maximum 100 points can be healed. A victim who is blinded will also
|
|
||||||
be cured by the heal spell.
|
|
||||||
|
|
||||||
See also: "CURE BLINDNESS"
|
|
||||||
#
|
|
||||||
INFRAVISION
|
|
||||||
|
|
||||||
Usage : cast 'infravision'
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : 12 hours + level
|
|
||||||
Level : Mage level 3, Cleric level 7.
|
|
||||||
|
|
||||||
Allows the caster to detect the heat given off by objects giving them
|
|
||||||
the ability to have much better vision in dark conditions.
|
|
||||||
|
|
||||||
See also: "DETECT INVISIBILITY"
|
|
||||||
#
|
|
||||||
INVISIBILITY
|
|
||||||
|
|
||||||
Usage : cast 'invisibility' <victim | object>
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : 24 hours, permanent on objects.
|
|
||||||
Level : Mage level 4.
|
|
||||||
|
|
||||||
Makes the target of the spell invisible to everyone except those who have
|
|
||||||
the "detect invisibility" spell.
|
|
||||||
|
|
||||||
Attacking while invisible will immediately break the spell.
|
|
||||||
|
|
||||||
See also: "DETECT INVISIBILITY"
|
|
||||||
#
|
|
||||||
"LIGHTNING BOLT"
|
|
||||||
|
|
||||||
Usage : cast 'lightning bolt' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 9.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell is more powerful than the shocking grasp spell.
|
|
||||||
|
|
||||||
See also: "SHOCKING GRASP"
|
|
||||||
#
|
|
||||||
"LOCATE OBJECT"
|
|
||||||
|
|
||||||
Usage : cast 'locate object' <object>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 6.
|
|
||||||
|
|
||||||
If possible you will know exactly where an object is, or the
|
|
||||||
name of the person using it. If more than one object by the
|
|
||||||
same name exists, you will get a listing of several objects.
|
|
||||||
The maximum number of objects you can simultaneously locate is
|
|
||||||
your level divided by 2.
|
|
||||||
#
|
|
||||||
"MAGIC MISSILE"
|
|
||||||
|
|
||||||
Usage : cast 'magic missile' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 1.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
Causes a bolt of magical energy to be thrown from the casters hands at the
|
|
||||||
victim.
|
|
||||||
#
|
|
||||||
POISON
|
|
||||||
|
|
||||||
Usage : cast 'poison' <victim | food | drink>
|
|
||||||
Accumulative: Yes on persons.
|
|
||||||
Duration : Level hours, or permanent on food and drinks.
|
|
||||||
Level : Cleric Level 8, Mage level 14.
|
|
||||||
|
|
||||||
Casting poison on food or drink (containers) will poison it. Eating
|
|
||||||
poisoned food/drinks will poison the person eating or drinking.
|
|
||||||
|
|
||||||
A person who is poisoned will suffer damage every hour, lose strength, and
|
|
||||||
gain less points than usual.
|
|
||||||
|
|
||||||
See also: "REMOVE POISON", "DETECT POISON"
|
|
||||||
#
|
|
||||||
"PROTECTION FROM EVIL"
|
|
||||||
|
|
||||||
Usage : cast 'protection from evil' [self]
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : 24 hours
|
|
||||||
Level : Cleric level 8.
|
|
||||||
|
|
||||||
The meaning of this spell is not yet fully defined.
|
|
||||||
#
|
|
||||||
"REMOVE CURSE"
|
|
||||||
|
|
||||||
Usage : cast 'remove curse' <victim | object>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 26.
|
|
||||||
|
|
||||||
Will remove a curse on carried objects or any persons in the room.
|
|
||||||
#
|
|
||||||
"REMOVE POISON"
|
|
||||||
|
|
||||||
Usage : cast 'remove poison' <victim | food | drink>
|
|
||||||
Accumulative: No
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 10.
|
|
||||||
|
|
||||||
Will remove the affects of poison from a victim or an object.
|
|
||||||
|
|
||||||
See also: POISON
|
|
||||||
#
|
|
||||||
SANCTUARY
|
|
||||||
|
|
||||||
Usage : cast 'sanctuary' [self]
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : 4 hours
|
|
||||||
Level : Cleric level 15.
|
|
||||||
|
|
||||||
When protected by sanctuary you will only receive 1/2 the normal damage
|
|
||||||
caused by a particular blow.
|
|
||||||
|
|
||||||
See also: ARMOR, BLESS
|
|
||||||
#
|
|
||||||
"SHOCKING GRASP"
|
|
||||||
|
|
||||||
Usage : cast 'shocking grasp' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 7.
|
|
||||||
Save : Versus spell for half damage.
|
|
||||||
|
|
||||||
This spell is more powerful than the burning hands spell.
|
|
||||||
|
|
||||||
See also: "BURNING HANDS"
|
|
||||||
#
|
|
||||||
"SENSE LIFE"
|
|
||||||
|
|
||||||
Usage : cast 'sense life'
|
|
||||||
Accumulative: Yes (Duration)
|
|
||||||
Duration : Level hours.
|
|
||||||
Level : Cleric level 5, Mage level 17.
|
|
||||||
|
|
||||||
Allows the caster to sense the presence of a player or monster in the
|
|
||||||
room which is hiding. The true identity will remain hidden however.
|
|
||||||
Invisible persons are also considered hidden.
|
|
||||||
|
|
||||||
See also: HIDE
|
|
||||||
#
|
|
||||||
STRENGTH
|
|
||||||
|
|
||||||
Usage : cast 'strength' <victim>
|
|
||||||
Accumulative: Yes
|
|
||||||
Duration : Level/2 + 4
|
|
||||||
Level : Mage level 6.
|
|
||||||
|
|
||||||
A person will gain 1 strength point per spell (2 points if level of
|
|
||||||
caster is greater than 18). Maximum strength is 18/100.
|
|
||||||
#
|
|
||||||
SUMMON
|
|
||||||
|
|
||||||
Usage : cast 'summon' <victim>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 10.
|
|
||||||
|
|
||||||
Will summon a person of the name spoken. It is not possible to
|
|
||||||
summon someone of three or more levels above yourself.
|
|
||||||
If you attempt to summon a monster, it will get a saving throw.
|
|
||||||
|
|
||||||
See also: NOSUMMON
|
|
||||||
#
|
|
||||||
VENTRILOQUATE
|
|
||||||
|
|
||||||
Usage : cast 'ventriloquate' <victim | object> <text>
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Mage level 1.
|
|
||||||
Save : Versus spell victim only sees attempted cast.
|
|
||||||
|
|
||||||
For all people in the same room as the caster that fail a saving throw, the
|
|
||||||
spell will make the object or victim appear to say the text written.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> cast 'vent' Mirlen I got 399,823 coins, don't even consider killing me!
|
|
||||||
#
|
|
||||||
"WORD OF RECALL"
|
|
||||||
|
|
||||||
Usage : cast 'word of recall'
|
|
||||||
Accumulative: -
|
|
||||||
Duration : Instantaneous
|
|
||||||
Level : Cleric level 12.
|
|
||||||
|
|
||||||
The caster will be transferred back to his hometown sanctuary (usually the
|
|
||||||
Temple of Midgaard).
|
|
||||||
#
|
|
||||||
$
|
|
|
@ -1,728 +0,0 @@
|
||||||
ADVANCE
|
|
||||||
|
|
||||||
Usage: advance <victim> <level>
|
|
||||||
|
|
||||||
ADVANCE moves a player to a new level. If used to promote a player to an
|
|
||||||
immortal level, and if you have the autowiz program installed, the wizlist and
|
|
||||||
immlist will automatically be recreated.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> advance rasmussen 34
|
|
||||||
|
|
||||||
See also: SET
|
|
||||||
#
|
|
||||||
WIZAT
|
|
||||||
|
|
||||||
Usage: at <room VNUM | item | mob | player name> <command> <arguments>
|
|
||||||
|
|
||||||
AT can be used to perform an action in a location other than where you are
|
|
||||||
standing. The first argument can be a virtual room number or the name of a
|
|
||||||
character or object. The remainder of the line is passed to the command
|
|
||||||
interpreter.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> at 3001 look
|
|
||||||
> at fido kill fido
|
|
||||||
> at 3.corpse get all corpse
|
|
||||||
> at catje wave catje
|
|
||||||
|
|
||||||
See also: GOTO
|
|
||||||
#
|
|
||||||
BAN UNBAN
|
|
||||||
|
|
||||||
Usage: ban [<all | new | select> <site>]
|
|
||||||
unban <site>
|
|
||||||
|
|
||||||
These commands prevent anyone from a site with a hostname containing the
|
|
||||||
site substring from logging in to the game. You may ban a site to ALL, NEW
|
|
||||||
or SELECT players. Banning a site to NEW players prevents any new players
|
|
||||||
from registering. Banning a site to ALL players disallows ANY connections
|
|
||||||
from that site. Banning a site SELECTively allows only players with site-ok
|
|
||||||
flags to log in from that site. Ban with no argument returns a list of
|
|
||||||
currently banned sites.
|
|
||||||
|
|
||||||
Unban removes the ban.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> ban all whitehouse.gov
|
|
||||||
> unban ai.mit.edu
|
|
||||||
|
|
||||||
See also: WIZLOCK
|
|
||||||
#
|
|
||||||
DATE
|
|
||||||
|
|
||||||
Shows the current real time. (Not a social)
|
|
||||||
#
|
|
||||||
DC
|
|
||||||
|
|
||||||
Usage: dc <descriptor number>
|
|
||||||
|
|
||||||
DC (DisConnect) is used to disconnect a socket. If used on a playing socket,
|
|
||||||
the player will lose his/her link, but, unlike PURGE, will not extract the
|
|
||||||
player or dump the player's inventory on the ground.
|
|
||||||
|
|
||||||
DC is also useful for disconnecting people who have accidentally left
|
|
||||||
themselves at the main menu, or connections sitting in the "Get name" state.
|
|
||||||
|
|
||||||
See also: USERS
|
|
||||||
#
|
|
||||||
ECHO GECHO QECHO SEND
|
|
||||||
|
|
||||||
Usage: echo <message>
|
|
||||||
gecho <message>
|
|
||||||
send <victim> <message>
|
|
||||||
qecho <message>
|
|
||||||
|
|
||||||
ECHO displays a string to everyone in your room.
|
|
||||||
GECHO displays the string to everyone in the game.
|
|
||||||
QECHO displays the string to everyone with the QUEST flag.
|
|
||||||
SEND displays the string to a particular person.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> echo Hi, everyone in the room.
|
|
||||||
> gecho Hi, everyone in the game, isn't this annoying?
|
|
||||||
> send rasmussen You are being watched.
|
|
||||||
#
|
|
||||||
FORCE
|
|
||||||
|
|
||||||
Usage: force <victim | all> <command> <arguments>
|
|
||||||
|
|
||||||
FORCE forces a character, either monster or player, to perform a certain
|
|
||||||
action. FORCE ALL forces everyone in the game; FORCE ROOM forces everyone in
|
|
||||||
your room.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> force fido drop meat
|
|
||||||
> force all save
|
|
||||||
> force room look fido
|
|
||||||
|
|
||||||
If you are invisible to the one being forced, the force will be performed
|
|
||||||
silently.
|
|
||||||
#
|
|
||||||
FREEZE THAW
|
|
||||||
|
|
||||||
Usage: freeze <victim>
|
|
||||||
thaw <victim>
|
|
||||||
|
|
||||||
FREEZE, originally invented here at CircleMUD (we think), is used to prevent
|
|
||||||
a player from playing. If frozen, the game will ignore all commands entered
|
|
||||||
by the player, including QUIT, until the player is unfrozen with THAW.
|
|
||||||
|
|
||||||
Obviously, this command should only be used in extreme disciplinary
|
|
||||||
circumstances.
|
|
||||||
|
|
||||||
See also: SET -> FROZEN
|
|
||||||
#
|
|
||||||
GOTO TRANS WIZTELEPORT
|
|
||||||
|
|
||||||
Usage: goto <location>
|
|
||||||
trans <victim>
|
|
||||||
teleport <victim> <location>
|
|
||||||
|
|
||||||
These commands are used to transports yourself and others to different rooms.
|
|
||||||
GOTO allows you to go to other rooms; TRANS transports a person from wherever
|
|
||||||
they are to the room YOU are in; TELEPORT transports your victim to some other
|
|
||||||
location.
|
|
||||||
|
|
||||||
For both GOTO and TELEPORT, the location specifier can be either a virtual
|
|
||||||
room number, or the name of a character or object.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> goto 3001
|
|
||||||
> goto rasmussen
|
|
||||||
> trans fido
|
|
||||||
> teleport fido 3001
|
|
||||||
> teleport fido 2.fido
|
|
||||||
|
|
||||||
See also: POOFIN, POOFOUT, SET -> ROOM, WIZAT
|
|
||||||
#
|
|
||||||
HANDBOOK
|
|
||||||
|
|
||||||
Usage: handbook
|
|
||||||
|
|
||||||
Guidelines for having an Immortal character -- you should read it.
|
|
||||||
#
|
|
||||||
HCONTROL
|
|
||||||
|
|
||||||
Usage: hcontrol build <house vnum> <exit dir> <player name>
|
|
||||||
hcontrol destroy <house vnum>
|
|
||||||
hcontrol pay <house vnum>
|
|
||||||
hcontrol show
|
|
||||||
|
|
||||||
House control, controls the addition, removal, and payments of houses.
|
|
||||||
Hcontrol show will show all the houses currently defined in the game
|
|
||||||
along with their last 'rent' payment date.
|
|
||||||
|
|
||||||
See also: HOUSE, HOUSES
|
|
||||||
#
|
|
||||||
HOLYLIGHT
|
|
||||||
|
|
||||||
Usage: holylight
|
|
||||||
|
|
||||||
A toggle which allows you to see:
|
|
||||||
Invisible people and objects, even if you don't have 'detect invisibility'
|
|
||||||
Hidden people, even if you don't have 'sense life'
|
|
||||||
Dark rooms, even if you don't have a light
|
|
||||||
|
|
||||||
It is expected most immortals will keep HOLYLIGHT on most of the time;
|
|
||||||
it exists so that you have the ability to see what mortals see for
|
|
||||||
debugging purposes.
|
|
||||||
#
|
|
||||||
IMOTD
|
|
||||||
|
|
||||||
Usage: imotd
|
|
||||||
|
|
||||||
Displays the Immortal message of the day. This file usually contains
|
|
||||||
new information on commands recently added, new features and other
|
|
||||||
important information that immortals should be aware of.
|
|
||||||
|
|
||||||
See also: MOTD
|
|
||||||
#
|
|
||||||
INVIS
|
|
||||||
|
|
||||||
Usage: invis [level]
|
|
||||||
|
|
||||||
INVIS sets your invisibility level. With no argument, invis toggles between
|
|
||||||
making you fully visible and fully invisible. If you specify a level, only
|
|
||||||
people at and above the level you specify will be able to see you.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> invis
|
|
||||||
> invis 31
|
|
||||||
|
|
||||||
See also: VISIBLE
|
|
||||||
#
|
|
||||||
LAST
|
|
||||||
|
|
||||||
Usage: last <player_name>
|
|
||||||
|
|
||||||
For checking the last time a person logged on, their sitename, and their
|
|
||||||
ID number.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> last ras
|
|
||||||
[ 24] [14 Cl] Ras : somesite.edu : Tue May 16 22:07:09 1995
|
|
||||||
|
|
||||||
See also: STAT
|
|
||||||
#
|
|
||||||
LOAD
|
|
||||||
|
|
||||||
Usage: load <mob | obj> <virtual number>
|
|
||||||
|
|
||||||
LOAD is used to create mobiles and objects. The first argument specifies if
|
|
||||||
you are trying to load a mobile or an object; the second is the virtual
|
|
||||||
number.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
> load obj 3099
|
|
||||||
You create a bulletin board.
|
|
||||||
|
|
||||||
> load mob 3005
|
|
||||||
You create the receptionist.
|
|
||||||
|
|
||||||
See also: VNUM
|
|
||||||
#
|
|
||||||
MUTE
|
|
||||||
|
|
||||||
Usage: mute <victim>
|
|
||||||
|
|
||||||
MUTE is used to shut a player up. When muted, a player will not be able to
|
|
||||||
use most communication channels until he/she is unmuted.
|
|
||||||
|
|
||||||
See also: FLAGS
|
|
||||||
#
|
|
||||||
NOHASSLE
|
|
||||||
|
|
||||||
Usage: nohassle
|
|
||||||
|
|
||||||
Toggles a flag to prevent aggressive monsters from attacking.
|
|
||||||
#
|
|
||||||
NOTITLE
|
|
||||||
|
|
||||||
Usage: notitle <vicitim>
|
|
||||||
|
|
||||||
Prevent players from being able to set their own titles; i.e., if the
|
|
||||||
player consistently has an offensive title. The definition of offensive
|
|
||||||
is left as an exercise for the reader.
|
|
||||||
|
|
||||||
See also: TITLE
|
|
||||||
#
|
|
||||||
NOWIZ
|
|
||||||
|
|
||||||
Usage: nowiz
|
|
||||||
|
|
||||||
Allows you to hear or ignore messages coming over the wiznet.
|
|
||||||
|
|
||||||
See also: WIZNET
|
|
||||||
#
|
|
||||||
OLC
|
|
||||||
|
|
||||||
Usage: olc { . | set | show | obj | mob | room} [args]
|
|
||||||
|
|
||||||
.: Repeat last modification command
|
|
||||||
set: Set OLC characteristics
|
|
||||||
show: Show OLC characteristics
|
|
||||||
obj: Modify an object
|
|
||||||
mob: Modify a mob
|
|
||||||
room: Modify a room
|
|
||||||
|
|
||||||
OnLine Creation. A feature which will eventually allow the creation
|
|
||||||
of areas ONLINE, without having to reboot the system.
|
|
||||||
|
|
||||||
See also: SHOW->ZONES, ZRESET
|
|
||||||
#
|
|
||||||
PAGE
|
|
||||||
|
|
||||||
Usage: page <player | all> <message>
|
|
||||||
|
|
||||||
PAGE is used to send a message, along with a beep, to another player. Use
|
|
||||||
PAGE ALL to send a message and a beep to everyone in the game.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> page rasmussen Hey, are you still at the keyboard?
|
|
||||||
> page all GAME WILL BE SHUTTING DOWN IN 10 MINUTES
|
|
||||||
|
|
||||||
Do not abuse this command.
|
|
||||||
#
|
|
||||||
PARDON
|
|
||||||
|
|
||||||
Usage: pardon <victim>
|
|
||||||
|
|
||||||
Removes killer and thief flags from a player.
|
|
||||||
#
|
|
||||||
POOFIN POOFOUT
|
|
||||||
|
|
||||||
Usage: poofin <message>
|
|
||||||
poofout <message>
|
|
||||||
|
|
||||||
Sets the message seen by players when you use GOTO to move to a different
|
|
||||||
room. POOFIN with no argument resets your poofin to the default "appears with
|
|
||||||
an ear-splitting bang"; POOFOUT with no argument defaults to "disappears in
|
|
||||||
a puff of smoke."
|
|
||||||
|
|
||||||
See also: GOTO
|
|
||||||
#
|
|
||||||
PURGE
|
|
||||||
|
|
||||||
Usage: purge [name]
|
|
||||||
|
|
||||||
Purge destroys things. If used with no arguments, it will clear a room of all
|
|
||||||
mobiles and objects, but will not harm players. If the argument is an object,
|
|
||||||
that object (and all of its contents, if any) will be destroyed. If the
|
|
||||||
argument is a mobile, the mobile will be destroyed, leaving its inventory and
|
|
||||||
equipment lying on the ground.
|
|
||||||
|
|
||||||
If the argument is the name of a player, the player's inventory and equipment
|
|
||||||
will drop on the ground and the player will lose his/her connection. For this
|
|
||||||
reason, PURGE should only be used on players in disciplinary situations.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> purge
|
|
||||||
> purge Pom
|
|
||||||
> purge sword
|
|
||||||
> purge dragon
|
|
||||||
|
|
||||||
See also: DC
|
|
||||||
#
|
|
||||||
RELOAD
|
|
||||||
|
|
||||||
Usage: reload < '*' | all | file >
|
|
||||||
|
|
||||||
Reload is used to reload text files such as the MOTD from disk into memory.
|
|
||||||
reload * reloads all the text files below.
|
|
||||||
|
|
||||||
Valid files are:
|
|
||||||
|
|
||||||
background (/mud_dir/lib/text/background)
|
|
||||||
credits (/mud_dir/lib/text/credits)
|
|
||||||
greetings (/mud_dir/lib/text/greetings)
|
|
||||||
handbook (/mud_dir/lib/text/handbook)
|
|
||||||
help (/mud_dir/lib/text/help)
|
|
||||||
immlist (/mud_dir/lib/text/immlist)
|
|
||||||
imotd (/mud_dir/lib/text/imotd)
|
|
||||||
news (/mud_dir/lib/text/news)
|
|
||||||
motd (/mud_dir/lib/text/motd)
|
|
||||||
info (/mud_dir/lib/text/info)
|
|
||||||
policy (/mud_dir/lib/text/policies)
|
|
||||||
wizlist (/mud_dir/lib/text/wizlist)
|
|
||||||
xhelp (/mud_dir/lib/text/help/*)
|
|
||||||
#
|
|
||||||
REROLL
|
|
||||||
|
|
||||||
Usage: reroll <player>
|
|
||||||
|
|
||||||
REROLL gives a player new stats (i.e., Str, Int, Wis, Dex, Con, and Cha)
|
|
||||||
|
|
||||||
See also: STAT
|
|
||||||
#
|
|
||||||
RESTORE
|
|
||||||
|
|
||||||
Usage: restore <player | mobile>
|
|
||||||
|
|
||||||
RESTORE restores a player or mobile to full hit, mana, and movement points.
|
|
||||||
If used on immortals, it also sets all skill levels to 100%.
|
|
||||||
#
|
|
||||||
RETURN
|
|
||||||
|
|
||||||
Usage: return
|
|
||||||
|
|
||||||
RETURN returns you to your regular body if you are switched into a mob.
|
|
||||||
|
|
||||||
See also: SWITCH
|
|
||||||
#
|
|
||||||
ROOMFLAGS
|
|
||||||
|
|
||||||
Usage: roomflags
|
|
||||||
|
|
||||||
Toggles a flag which causes the virtual room number and room flags, if any,
|
|
||||||
to be displayed next to room names.
|
|
||||||
#
|
|
||||||
SET
|
|
||||||
|
|
||||||
Usage: set [ file | player ] <character> <field> <value>
|
|
||||||
|
|
||||||
SET is an extremely powerful command, capable of setting dozens of aspects of
|
|
||||||
characters, both players and mobiles.
|
|
||||||
|
|
||||||
SET PLAYER forces set to look for a player and not a mobile; useful for
|
|
||||||
players with names such as 'guard'.
|
|
||||||
|
|
||||||
SET FILE lets you change players who are not logged on. If you use SET FILE
|
|
||||||
on a player who IS logged on, your change will be lost. If you wish to set
|
|
||||||
a player who is in the game but is linkless, use set twice -- once with the
|
|
||||||
FILE argument, and once without -- to make sure that the change takes.
|
|
||||||
|
|
||||||
For toggled fields (BINARY), the value must be ON, OFF, YES, or NO.
|
|
||||||
|
|
||||||
The following are valid fields:
|
|
||||||
|
|
||||||
Field Level Required Who Value Type Decription
|
|
||||||
-----------------------------------------------------------------------------
|
|
||||||
age LVL_GRGOD BOTH NUMBER Character's age
|
|
||||||
brief LVL_GOD PC BINARY Brief mode
|
|
||||||
invstart LVL_GOD PC BINARY Invisible @ Start
|
|
||||||
title LVL_GOD PC MISC Player's title
|
|
||||||
nosummon LVL_GRGOD PC BINARY NOSUMMON flag
|
|
||||||
maxhit LVL_GRGOD BOTH NUMBER Max HP
|
|
||||||
maxmana LVL_GRGOD BOTH NUMBER Max mana
|
|
||||||
maxmove LVL_GRGOD BOTH NUMBER Max movement
|
|
||||||
hit LVL_GRGOD BOTH NUMBER Current HP
|
|
||||||
mana LVL_GRGOD BOTH NUMBER Current mana
|
|
||||||
move LVL_GRGOD BOTH NUMBER Current movement
|
|
||||||
align LVL_GOD BOTH NUMBER Alignment
|
|
||||||
str LVL_GRGOD BOTH NUMBER Strength
|
|
||||||
stradd LVL_GRGOD BOTH NUMBER Additional STR (18/xx)
|
|
||||||
int LVL_GRGOD BOTH NUMBER Inteligence
|
|
||||||
wis LVL_GRGOD BOTH NUMBER Wisdom
|
|
||||||
dex LVL_GRGOD BOTH NUMBER Dexterity
|
|
||||||
con LVL_GRGOD BOTH NUMBER Constitution
|
|
||||||
cha LVL_GRGOD BOTH NUMBER Charisma
|
|
||||||
sex LVL_GRGOD BOTH MISC Sex
|
|
||||||
ac LVL_GRGOD BOTH NUMBER Armor class
|
|
||||||
gold LVL_GOD BOTH NUMBER Gold (On hand)
|
|
||||||
bank LVL_GOD PC NUMBER Gold in bank
|
|
||||||
exp LVL_GRGOD BOTH NUMBER Experience points
|
|
||||||
hitroll LVL_GRGOD BOTH NUMBER To-Hit modifier
|
|
||||||
damroll LVL_GRGOD BOTH NUMBER Damage modifier
|
|
||||||
invis LVL_IMPL PC NUMBER Invisible (level)
|
|
||||||
nohassle LVL_GRGOD PC BINARY NOHASSLE flag
|
|
||||||
frozen LVL_FREEZE PC BINARY FROZEN flag
|
|
||||||
practices LVL_GRGOD PC NUMBER # of practices
|
|
||||||
lessons LVL_GRGOD PC NUMBER # of practices
|
|
||||||
drunk LVL_GRGOD BOTH MISC Drunkeness
|
|
||||||
hunger LVL_GRGOD BOTH MISC Hrs to hunger
|
|
||||||
thirst LVL_GRGOD BOTH MISC Hrs to thirst
|
|
||||||
killer LVL_GOD PC BINARY KILLER flag
|
|
||||||
thief LVL_GOD PC BINARY THIEF flag
|
|
||||||
level LVL_IMPL BOTH NUMBER Level
|
|
||||||
room LVL_IMPL BOTH NUMBER Move to room
|
|
||||||
roomflag LVL_GRGOD PC BINARY ROOMFLAGS flag
|
|
||||||
siteok LVL_GRGOD PC BINARY SITEOK flag
|
|
||||||
deleted LVL_IMPL PC BINARY DELETED flag
|
|
||||||
class LVL_GRGOD BOTH MISC Class (W/T/C/M)
|
|
||||||
nowizlist LVL_GOD PC BINARY Not Wizlistable flag
|
|
||||||
quest LVL_GOD PC BINARY QUESTING flag
|
|
||||||
loadroom LVL_GRGOD PC MISC Room to load in (#/off)
|
|
||||||
color LVL_GOD PC BINARY COLOR flag
|
|
||||||
idnum LVL_IMPL PC NUMBER ID Number
|
|
||||||
passwd LVL_IMPL PC MISC Player password
|
|
||||||
nodelete LVL_GOD PC BINARY Undeletable flag
|
|
||||||
|
|
||||||
See also: STAT
|
|
||||||
#
|
|
||||||
SHOW
|
|
||||||
|
|
||||||
Usage: show <mode> [argument]
|
|
||||||
|
|
||||||
Valid Modes:
|
|
||||||
|
|
||||||
death errors godrooms houses
|
|
||||||
player rent shops stats
|
|
||||||
zones
|
|
||||||
|
|
||||||
The SHOW command displays information. Some modes of show require additional
|
|
||||||
information, such as a player name.
|
|
||||||
|
|
||||||
death: Shows all death traps in the game.
|
|
||||||
errors: Shows errant rooms.
|
|
||||||
godrooms: Shows the rooms in the 'god zone'.
|
|
||||||
houses: Shows the houses that are currently defined.
|
|
||||||
player: Shows player summary information, simply provide a player name.
|
|
||||||
rent: Shows the filename and path to a players rent file.
|
|
||||||
shops: Shows all the shops in the game and their buy/sell parameters.
|
|
||||||
stats: Shows game status information including players in game, mobs etc.
|
|
||||||
zones: Shows all the zones in the game and their current reset status.
|
|
||||||
An age of -1 means it is in the 'to be reset next' queue.
|
|
||||||
|
|
||||||
See also: STAT, ZRESET
|
|
||||||
#
|
|
||||||
SHUTDOWN
|
|
||||||
|
|
||||||
Usage: shutdown [reboot | die | pause]
|
|
||||||
|
|
||||||
SHUTDOWN shuts the MUD down. The SHUTDOWN command works in conjunction with
|
|
||||||
CircleMUD's 'autorun' script. If you are not using autorun, the arguments are
|
|
||||||
meaningless. If you are using autorun, the following arguments are available:
|
|
||||||
|
|
||||||
REBOOT Pause only 5 seconds instead of the normal 40 before trying to
|
|
||||||
restart the MUD.
|
|
||||||
|
|
||||||
DIE Kill the autorun script; the MUD will not reboot until autorun is
|
|
||||||
explicitly run again.
|
|
||||||
|
|
||||||
PAUSE Create a file called 'paused' in Circle's root directory; do not
|
|
||||||
try to restart the MUD until 'paused' is removed.
|
|
||||||
#
|
|
||||||
SKILLSET
|
|
||||||
|
|
||||||
Usage: skillset <name> '<skill>' <value>
|
|
||||||
|
|
||||||
Sets the specified skill to the specified value.
|
|
||||||
|
|
||||||
See also: SET
|
|
||||||
#
|
|
||||||
SLOWNS
|
|
||||||
|
|
||||||
Usage: slowns
|
|
||||||
|
|
||||||
Toggles whether or not IP addresses are resolved into readable site names.
|
|
||||||
If slow nameserver is enabled, USERS will show only IP addresses.
|
|
||||||
(128.123.222.111 etc).
|
|
||||||
|
|
||||||
See also: USERS
|
|
||||||
#
|
|
||||||
SNOOP
|
|
||||||
|
|
||||||
Usage: snoop [player]
|
|
||||||
|
|
||||||
Snoop allows you to listen in on another player's session; everything the
|
|
||||||
player sees or types will be displayed on your terminal preceded by a '%'.
|
|
||||||
|
|
||||||
Obviously, there are many ethical considerations to the use of this command;
|
|
||||||
snoop should be used minimally, and only for disciplinary purposes.
|
|
||||||
|
|
||||||
Type snoop <your name> or just snoop to stop snooping.
|
|
||||||
#
|
|
||||||
SNOWBALL
|
|
||||||
|
|
||||||
Snowball is just a social -- it prints a funny message, and nothing more.
|
|
||||||
#
|
|
||||||
STAT
|
|
||||||
|
|
||||||
Usage: stat [player | object | mobile | file] <name>
|
|
||||||
|
|
||||||
Gives information about players, monsters, and objects in the game. The type
|
|
||||||
argument is optional.
|
|
||||||
|
|
||||||
STAT PLAYER will search only for players; useful for statting people with
|
|
||||||
names such as Red or Cityguard.
|
|
||||||
|
|
||||||
STAT OBJECT will search only for objects.
|
|
||||||
|
|
||||||
STAT MOBILE will search only for monsters.
|
|
||||||
|
|
||||||
STAT FILE is used to stat players who are not logged in; the information
|
|
||||||
displayed comes from the playerfile.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> stat fido
|
|
||||||
> stat player red
|
|
||||||
> stat mobile red
|
|
||||||
> stat file niandra
|
|
||||||
> stat object thunderbolt
|
|
||||||
|
|
||||||
See also: VSTAT
|
|
||||||
#
|
|
||||||
STRING
|
|
||||||
|
|
||||||
Usage: string <type> <name> <field> [<string> | <keyword>]
|
|
||||||
|
|
||||||
For changing the text-strings associated with objects and characters. The
|
|
||||||
format is:
|
|
||||||
|
|
||||||
Type is either 'obj' or 'char'.
|
|
||||||
|
|
||||||
Field is one of the following(the names may be abbreviated):
|
|
||||||
|
|
||||||
Name (the call-name of an obj/char - kill giant)
|
|
||||||
Short (for inventory lists (obj's) and actions (char's))
|
|
||||||
Long (for when obj/character is seen in room)
|
|
||||||
Title (for players)
|
|
||||||
Description (For look at. For obj's, must be followed by a keyword)
|
|
||||||
Delete-description (only for obj's. Must be followed by keyword)
|
|
||||||
|
|
||||||
Where a string is expected as the last argument, a newline will make you enter
|
|
||||||
a string mode, and the game will prompt you for new lines to the string until
|
|
||||||
you exceed the maximum length for the string or you end a line with a '@'.
|
|
||||||
|
|
||||||
Mobiles and objects currently cannot be strung.
|
|
||||||
#
|
|
||||||
SWITCH
|
|
||||||
|
|
||||||
Usage: switch <monster>
|
|
||||||
|
|
||||||
SWITCH is used to take over the body of mobiles; useful for interactive
|
|
||||||
adventures. If the monster in which you are switched is killed you will be
|
|
||||||
returned to your own body.
|
|
||||||
|
|
||||||
See also: RETURN
|
|
||||||
#
|
|
||||||
SYSLOG
|
|
||||||
|
|
||||||
Usage: syslog [off | brief | normal | complete]
|
|
||||||
|
|
||||||
The SYSLOG command controls how detailed of an on-line system log you see.
|
|
||||||
Messages surrounded by '[' and ']' are syslog messages and are in green
|
|
||||||
if you have color on.
|
|
||||||
|
|
||||||
The messages you receive are level dependent.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> syslog complete
|
|
||||||
> syslog off
|
|
||||||
|
|
||||||
See also: COLOR
|
|
||||||
#
|
|
||||||
UNAFFECT
|
|
||||||
|
|
||||||
Usage: unaffect <victim>
|
|
||||||
|
|
||||||
Removes all affections (i.e., spell effects) from a player.
|
|
||||||
|
|
||||||
See also: STAT
|
|
||||||
#
|
|
||||||
UPTIME
|
|
||||||
|
|
||||||
Usage: uptime
|
|
||||||
|
|
||||||
Displays when the game was booted and calculates how long ago that was.
|
|
||||||
#
|
|
||||||
USERS
|
|
||||||
|
|
||||||
Usage: users [switches]
|
|
||||||
|
|
||||||
USERS gives a list of all sockets (i.e., connections) currently active on the
|
|
||||||
MUD. The multi-column display shows the socket number (used by DC), class,
|
|
||||||
level, and name of the player connected, connection state, idle time, and
|
|
||||||
hostname.
|
|
||||||
|
|
||||||
The following switches are available:
|
|
||||||
|
|
||||||
-k or -o Show only outlaws (killers and thieves).
|
|
||||||
-p Show only sockets in the playing sockets.
|
|
||||||
-d Show only non-playing (deadweight) sockets.
|
|
||||||
-l min-max Show only sockets whose characters are from level min to max.
|
|
||||||
-n <name> Show the socket with <name> associated with it.
|
|
||||||
-h <host> Show all sockets from <host>.
|
|
||||||
-c list Show only sockets whose characters' classes are in list.
|
|
||||||
|
|
||||||
See also: DC, SLOWNS
|
|
||||||
#
|
|
||||||
VNUM
|
|
||||||
|
|
||||||
Usage: vnum <mob | obj> <name>
|
|
||||||
|
|
||||||
Gives a list of the virtual numbers of objects or mobiles which have the
|
|
||||||
specified name.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> vnum obj ring
|
|
||||||
1. [ 904] a platinum ring
|
|
||||||
2. [ 2543] a seashell ring
|
|
||||||
3. [ 2588] a small emerald ring
|
|
||||||
|
|
||||||
> vnum mob dragon
|
|
||||||
1. [ 1] Puff
|
|
||||||
2. [ 908] the dragon turtle
|
|
||||||
3. [ 2548] the Master of Illusions
|
|
||||||
#
|
|
||||||
VSTAT
|
|
||||||
|
|
||||||
Usage: vstat < mob | obj > <virtual number>
|
|
||||||
|
|
||||||
Used to stat a prototypical mobile or object by virtual number.
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
> vstat obj 3000
|
|
||||||
> vstat mob 3001
|
|
||||||
|
|
||||||
See also: LOAD, STAT, VNUM
|
|
||||||
#
|
|
||||||
WIZHELP
|
|
||||||
|
|
||||||
Usage: wizhelp
|
|
||||||
|
|
||||||
Gives a list of the special commands available at your level.
|
|
||||||
#
|
|
||||||
WIZLOCK
|
|
||||||
|
|
||||||
Usage: wizlock [value]
|
|
||||||
|
|
||||||
WIZLOCK allows you to restrict the game. WIZLOCK 1 prevents new characters
|
|
||||||
from being created. WIZLOCK n, 2 <= n <= 34, prevents new characters and
|
|
||||||
allows only characters level n and above to log on. WIZLOCK with no argument
|
|
||||||
displays the current WIZLOCK level.
|
|
||||||
|
|
||||||
See also: BAN
|
|
||||||
#
|
|
||||||
WIZNET ;
|
|
||||||
|
|
||||||
The immortal communication channel.
|
|
||||||
|
|
||||||
Usage: wiznet [ '@' | '+' | '-' | '#' ] [<text>]
|
|
||||||
|
|
||||||
Examples:
|
|
||||||
|
|
||||||
>; <text> - just sends text
|
|
||||||
>; @ - shows all gods that are on and visible to you
|
|
||||||
- also shows if the gods who are visible to you are writing
|
|
||||||
|
|
||||||
This code was provided by Gnort.
|
|
||||||
|
|
||||||
See also: NOWIZ
|
|
||||||
#
|
|
||||||
ZRESET
|
|
||||||
|
|
||||||
Usage: zreset < zone | '*' | '.' >
|
|
||||||
|
|
||||||
Used to force a zone to reset. '*' forces all zones to reset. '.' forces
|
|
||||||
the zone you are in to reset.
|
|
||||||
|
|
||||||
See also: SHOW -> ZONES
|
|
||||||
#
|
|
||||||
$
|
|
|
@ -1,9 +1,13 @@
|
||||||
(lib/text/news)
|
(lib/text/news)
|
||||||
THE 2007 tbaMUD HERALD
|
THE 2008 tbaMUD HERALD
|
||||||
"We addict players for their own enjoyment."
|
"We addict players for their own enjoyment."
|
||||||
|
|
||||||
NEW COMMANDS AND NEW MUD BEHAVIOR:
|
NEW COMMANDS AND NEW MUD BEHAVIOR:
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
** Check out the latest news and information on the tbaMUD codebase with
|
||||||
|
tbaMUDs new content management system (drupal) at http://tbamud.com.
|
||||||
|
Forums, blogs, etc. (thanks Mordecai)
|
||||||
|
|
||||||
** Doors are now visible in the exits menu. i.e. Exits: n (e) w s.
|
** Doors are now visible in the exits menu. i.e. Exits: n (e) w s.
|
||||||
|
|
||||||
** Added questpoints so be sure to ask about quests.
|
** Added questpoints so be sure to ask about quests.
|
||||||
|
|
|
@ -982,6 +982,7 @@ He is covered in a film of dirt and grime. He smells even worse than you.
|
||||||
80 6400
|
80 6400
|
||||||
8 8 1
|
8 8 1
|
||||||
E
|
E
|
||||||
|
T 206
|
||||||
#169
|
#169
|
||||||
citizen~
|
citizen~
|
||||||
a citizen~
|
a citizen~
|
||||||
|
@ -1277,10 +1278,11 @@ carries out their orders and makes a good job of it. He has been fighting more
|
||||||
years than you've been living.
|
years than you've been living.
|
||||||
~
|
~
|
||||||
2058 0 0 0 0 0 0 0 1000 E
|
2058 0 0 0 0 0 0 0 1000 E
|
||||||
30 10 -8 6d6+300 5d5+5
|
5 19 7 1d1+50 1d2+0
|
||||||
300 90000
|
50 2500
|
||||||
8 8 1
|
8 8 1
|
||||||
E
|
E
|
||||||
|
T 207
|
||||||
#190
|
#190
|
||||||
cat pussy~
|
cat pussy~
|
||||||
the cat~
|
the cat~
|
||||||
|
|
|
@ -482,7 +482,7 @@ T 3011
|
||||||
#3089
|
#3089
|
||||||
petshops shop boy~
|
petshops shop boy~
|
||||||
the Pet Shop Boy~
|
the Pet Shop Boy~
|
||||||
There is a Pet Shop Boy standing here cuddleing something furry in his hands.
|
There is a Pet Shop Boy standing here cuddling something furry in his hands.
|
||||||
~
|
~
|
||||||
As you look at him, he opens his hands to reveal a rat!
|
As you look at him, he opens his hands to reveal a rat!
|
||||||
~
|
~
|
||||||
|
|
|
@ -40,6 +40,10 @@ The email listing of the gods is pinned against the wall.~
|
||||||
0 0 0 0
|
0 0 0 0
|
||||||
1 1 0 30
|
1 1 0 30
|
||||||
E
|
E
|
||||||
|
emails listing~
|
||||||
|
HELP CONTACT
|
||||||
|
~
|
||||||
|
E
|
||||||
wizlist~
|
wizlist~
|
||||||
Implementors
|
Implementors
|
||||||
~~~~~~~~~~~
|
~~~~~~~~~~~
|
||||||
|
@ -56,10 +60,6 @@ wizlist~
|
||||||
Santa Shamra Shimmer Silvanos Smaug Snowlock Talgard Taylor
|
Santa Shamra Shimmer Silvanos Smaug Snowlock Talgard Taylor
|
||||||
Theophilus Tocamat Torpidai Treestump Tuskony Zizazat
|
Theophilus Tocamat Torpidai Treestump Tuskony Zizazat
|
||||||
~
|
~
|
||||||
E
|
|
||||||
emails listing~
|
|
||||||
HELP CONTACT
|
|
||||||
~
|
|
||||||
#5
|
#5
|
||||||
foraged berries~
|
foraged berries~
|
||||||
some foraged berries~
|
some foraged berries~
|
||||||
|
@ -803,6 +803,20 @@ comfy bed~
|
||||||
This bed is beckoning you to lay down and get some much needed sleep.
|
This bed is beckoning you to lay down and get some much needed sleep.
|
||||||
Just "sleep bed"
|
Just "sleep bed"
|
||||||
~
|
~
|
||||||
|
#49
|
||||||
|
quarter coin~
|
||||||
|
a quarter~
|
||||||
|
A typical U.S. quarter that appears to be perfect for flipping.~
|
||||||
|
~
|
||||||
|
12 0 0 0 0 a 0 0 0 0 0 0 0
|
||||||
|
0 0 0 0
|
||||||
|
1 1 0 0
|
||||||
|
T 37
|
||||||
|
E
|
||||||
|
coin quarter~
|
||||||
|
This quarter is perfect for deciding those difficult boolean questions you
|
||||||
|
may have. Just "flip quarter"
|
||||||
|
~
|
||||||
#50
|
#50
|
||||||
generic light~
|
generic light~
|
||||||
a generic light~
|
a generic light~
|
||||||
|
|
|
@ -1063,8 +1063,8 @@ visible.
|
||||||
0 0 0 0
|
0 0 0 0
|
||||||
0 0 0 0
|
0 0 0 0
|
||||||
E
|
E
|
||||||
september~
|
june~
|
||||||
. .:IIIIHIHHIHHHII::I:.
|
. .:IIIIHIHHIHHHII::I:.
|
||||||
:IIIIHIHHHHHHMMHHIHHIIHHIII:.
|
:IIIIHIHHHHHHMMHHIHHIIHHIII:.
|
||||||
,.:HIHHHHHHHHHHHHHHHHHHHHHIHIHHII:.
|
,.:HIHHHHHHHHHHHHHHHHHHHHHIHIHHII:.
|
||||||
.:IIHHHHHHHHMMMMMHHHHMMMHHMHHHIIIHIIII:
|
.:IIHHHHHHHHMMMMMHHHHMMMHHMHHHIIIHIIII:
|
||||||
|
@ -1121,9 +1121,21 @@ IHHHHMHMMMMMMMHHHHHI:IT:TI:..:HI:.. ..:. . :IHII
|
||||||
::.:............. .. . ...AHIHIIIIIHHHI::""' 'VII:.. .. .
|
::.:............. .. . ...AHIHIIIIIHHHI::""' 'VII:.. .. .
|
||||||
::.:.:.......... .. . ...HHHIIIIIIHHHI::. . 'VII::. . . ,
|
::.:.:.......... .. . ...HHHIIIIIIHHHI::. . 'VII::. . . ,
|
||||||
':::.:.:..... .. . . . ..:MHHIHIIIII:I::. . 'VII:::. .. .
|
':::.:.:..... .. . . . ..:MHHIHIIIII:I::. . 'VII:::. .. .
|
||||||
|
:::::.:..:.... . . . ...AHHHHIHIIII:::. . 'VII:::. . . :.
|
||||||
|
:::::::.:..... .. . ....MHHHHHIHIII::.:.. . 'VII::. . ::
|
||||||
|
:::::::::.:.... .. ....:MHHHHIHII:I::::... . 'VI::. . ::I)
|
||||||
|
'::::::::::.:... .. ...:MHHHHIHIIII::::.. . 'VI:. ...:V
|
||||||
|
.:::::::::::.:.... . .AMMHHIHIII:I::::... . . I::. ...:-"
|
||||||
|
:.::I::::::::.:. . ..MMMHHIHIIII:I:::... . . .::. ,..-"
|
||||||
|
:..:II:I:::::.:.. . ..MMMHHIHIIIIIII:I::.... . . ..::""'
|
||||||
|
.::.:III:I::::::.:.. ..MMMMIVHIHIIIII:I::::.... . .....:,
|
||||||
|
.:.::..:III:I:::::.:... .MMHMAIVHHIHIIIII:I::::.. . ..::..:,
|
||||||
|
. .:::.::III:I::::.:... .VMMHMAIVHHHIHIIII:I::::.. ..:...:::
|
||||||
|
. :::I.:::III:I:::.::.. .:MMHHMAIVHHIHIIIII:I::::....:::.::::
|
||||||
|
.::IIH.:::III:I::::.:.. .MMHMHMAIVHHHIHIIIIII:I
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
august~
|
april~
|
||||||
. nHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHn.
|
. nHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHn.
|
||||||
.MS?MMMMMMMMMMMMMMMMMM?MM-MMMMMMMMMSHMMMMMMM
|
.MS?MMMMMMMMMMMMMMMMMM?MM-MMMMMMMMMSHMMMMMMM
|
||||||
MMMMMH?MMMMMMMX*MM?MMX%MM/MMMMMM"HMMMMMMMMMMMM
|
MMMMMH?MMMMMMMX*MM?MMX%MM/MMMMMM"HMMMMMMMMMMMM
|
||||||
|
@ -1176,7 +1188,7 @@ august~
|
||||||
%% % %%%%%%
|
%% % %%%%%%
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
july~
|
March~
|
||||||
. ,.--..
|
. ,.--..
|
||||||
,::.'.. . . "VI:I:".':-.,.
|
,::.'.. . . "VI:I:".':-.,.
|
||||||
,I::. .. . 'VHMHII:.::;:.:,..
|
,I::. .. . 'VHMHII:.::;:.:,..
|
||||||
|
@ -1242,183 +1254,6 @@ july~
|
||||||
':::.:... ..I::I::.:....:. .: .. ...::. . . III:II:. '
|
':::.:... ..I::I::.:....:. .: .. ...::. . . III:II:. '
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
june~
|
|
||||||
. :AMMMMMMMMMMMMA:
|
|
||||||
:AMMMMMMMMMHHHHHMMMMMMMMA:
|
|
||||||
:AMHMMMMHHMHIHHIMMMHMMMMHHA:
|
|
||||||
:AM'MMMMMMHHIHHHIMMMMMIMMHHHH:
|
|
||||||
AM:IMMMMMHHIHIHHHIMMHHHHHHHHHH
|
|
||||||
AMIIHMMMMMHIHHHIHHIHHHHHHHHHHHH:
|
|
||||||
MMIHHMMMMMHHIHHHIHHHHHHHHHHHHHHH
|
|
||||||
AMMMMMHHHHHHI;;;;;;;IHHHI;;IHHHHH
|
|
||||||
MMMMHIIII;":AMMMMA ,[[, HH
|
|
||||||
MMMMHII; AW"'''' :: HH
|
|
||||||
IHHIHIII;:'' ,GFMF[ [MM[: IH
|
|
||||||
AHHIHII;::': ";[P,[ ;; :::: IH
|
|
||||||
IHHHIHII;;:: :[;: ;H
|
|
||||||
AHHHHHII;;;:: : : [ : ;H
|
|
||||||
IHHIIHI:[;;;:: ; ; ; , , IH
|
|
||||||
IHHIIHH:[;;;: ; ;: ':"::" '; IH
|
|
||||||
IHHIIHI:[;;: ::: ; ,,,, ' HH
|
|
||||||
:IHHHIHHMMA;::: [;;""""""[; AMI
|
|
||||||
;IHHHHIIHMM;: : : ;;[,,,,[; HHI
|
|
||||||
IIHHMMHHIHHM;:: '"""' AMHI
|
|
||||||
IIHHMMHMHHIIIM;:: AMMHI
|
|
||||||
IHHHMMHMHMHHHIHI;:: :AMMMHI
|
|
||||||
IHHHMMMMHMMHHHII;;;;:: :,;; MMMHHI
|
|
||||||
IHHHMMHHHHMMHHHI;:";;;;;;" MMMIH'
|
|
||||||
;IHHMMHMMMMHF"HHII MMMHH
|
|
||||||
IHHMMHV;;:: HHII;: : MMHHI
|
|
||||||
IHHMV;;::: HHII;: : : MMHI;
|
|
||||||
IHMV;;:: : "HII;: :: MMI;
|
|
||||||
:IHV;:: : 'HI: :: MM;
|
|
||||||
IV;:: : : "II;: ;
|
|
||||||
IH;;::: : ;;;I: ;
|
|
||||||
;M;;:::: : ';;;HI: '
|
|
||||||
MH;;:::: : ';;HI: ;
|
|
||||||
IM;;;::: : :[; ';I"I: ;
|
|
||||||
M;;;::: : : [;;,: ' : '
|
|
||||||
;;:::: : ::'' : ':
|
|
||||||
;;::: : : ': :
|
|
||||||
:;;:: : :: ':'
|
|
||||||
;;:: : : : '':
|
|
||||||
;;:: : : :;,:
|
|
||||||
;;:: : :: ;[[[,:
|
|
||||||
:;;:: : : ;;[[[;':
|
|
||||||
;;:: : : [:: : : ;[[[[;;[,
|
|
||||||
;:: : [;;;: : :, [[[[['[[;
|
|
||||||
;:: : :M;;: : :,[ [[[[ [['
|
|
||||||
;: : "[:: : ::[ ;[' ;[
|
|
||||||
;: : "[: : ::[ :' :'
|
|
||||||
:: :: : ", :::;[ :' :;
|
|
||||||
: :: ': : :::;[ ::' :;
|
|
||||||
:: ; : : ::::;[:,,::;;I' ;;
|
|
||||||
;;:;: : : : :::::::: '""' I[[;"'
|
|
||||||
;;;:: : : '::::' ;
|
|
||||||
;;;:: : : : ;
|
|
||||||
';;;;::: : : ': ;
|
|
||||||
';;:::: : :
|
|
||||||
M;:::: : ':
|
|
||||||
MMMI;:::: : ;
|
|
||||||
MMMMMA;::: :
|
|
||||||
AHHMMMMHA;:::: : ;
|
|
||||||
:MHHMMMMMMMA;: ' :
|
|
||||||
AHHHMMM;"TTTTL: : ;
|
|
||||||
AHHHHHHMMLLLLLH ': :
|
|
||||||
:MHHH:::;HHMMMMMA: : ;
|
|
||||||
:AHHH:::HH;;;;;MMM;: :
|
|
||||||
:MHH;: ;;;;;MMM:: : : ;
|
|
||||||
:MH;: : ';;;;MMM:: ': ':
|
|
||||||
,H;: ';;;MMM::: :':' ;
|
|
||||||
,;: : : : ;;;Y;H:: :
|
|
||||||
,;: : : : ';;;:; : : ; ;
|
|
||||||
[;:: : ;;:; ; ; ;
|
|
||||||
~
|
|
||||||
E
|
|
||||||
may~
|
|
||||||
. 8888 8888888
|
|
||||||
888888888888888888888888
|
|
||||||
8888:::8888888888888888888888888
|
|
||||||
8888::::::8888888888888888888888888888
|
|
||||||
88::::::::888:::8888888888888888888888888
|
|
||||||
88888888::::8:::::::::::88888888888888888888
|
|
||||||
888 8::888888::::::::::::::::::88888888888 888
|
|
||||||
88::::88888888::::m::::::::::88888888888 8
|
|
||||||
888888888888888888:M:::::::::::8888888888888
|
|
||||||
88888888888888888888::::::::::::M88888888888888
|
|
||||||
8888888888888888888888:::::::::M8888888888888888
|
|
||||||
8888888888888888888888:::::::M888888888888888888
|
|
||||||
8888888888888888::88888::::::M88888888888888888888
|
|
||||||
88888888888888888:::88888:::::M888888888888888 8888
|
|
||||||
88888888888888888:::88888::::M::;o*M*o;888888888 88
|
|
||||||
88888888888888888:::8888:::::M:::::::::::88888888 8
|
|
||||||
88888888888888888::::88::::::M:;:::::::::::888888888
|
|
||||||
8888888888888888888:::8::::::M::aAa::::::::M8888888888 8
|
|
||||||
88 8888888888::88::::8::::M:::::::::::::888888888888888 8888
|
|
||||||
88 88888888888:::8:::::::::M::::::::::;::88:88888888888888888
|
|
||||||
8 8888888888888:::::::::::M::"@@@@@@@"::::8w8888888888888888
|
|
||||||
88888888888:888::::::::::M:::::"@a@":::::M8i888888888888888
|
|
||||||
8888888888::::88:::::::::M88:::::::::::::M88z88888888888888888
|
|
||||||
8888888888:::::8:::::::::M88888:::::::::MM888!888888888888888888
|
|
||||||
888888888:::::8:::::::::M8888888MAmmmAMVMM888*88888888 88888888
|
|
||||||
888888 M:::::::::::::::M888888888:::::::MM88888888888888 8888888
|
|
||||||
8888 M::::::::::::::M88888888888::::::MM888888888888888 88888
|
|
||||||
888 M:::::::::::::M8888888888888M:::::mM888888888888888 8888
|
|
||||||
888 M::::::::::::M8888:888888888888::::m::Mm88888 888888 8888
|
|
||||||
88 M::::::::::::8888:88888888888888888::::::Mm8 88888 888
|
|
||||||
88 M::::::::::8888M::88888::888888888888:::::::Mm88888 88
|
|
||||||
8 MM::::::::8888M:::8888:::::888888888888::::::::Mm8 4
|
|
||||||
8M:::::::8888M:::::888:::::::88:::8888888::::::::Mm 2
|
|
||||||
88MM:::::8888M:::::::88::::::::8:::::888888:::M:::::M
|
|
||||||
8888M:::::888MM::::::::8:::::::::::M::::8888::::M::::M
|
|
||||||
88888M:::::88:M::::::::::8:::::::::::M:::8888::::::M::M
|
|
||||||
88 888MM:::888:M:::::::::::::::::::::::M:8888:::::::::M:
|
|
||||||
8 88888M:::88::M:::::::::::::::::::::::MM:88::::::::::::M
|
|
||||||
88888M:::88::M::::::::::*88*::::::::::M:88::::::::::::::M
|
|
||||||
888888M:::88::M:::::::::88@@88:::::::::M::88::::::::::::::M
|
|
||||||
888888MM::88::MM::::::::88@@88:::::::::M:::8::::::::::::::*8
|
|
||||||
88888 M:::8::MM:::::::::*88*::::::::::M:::::::::::::::::88@@
|
|
||||||
8888 MM::::::MM:::::::::::::::::::::MM:::::::::::::::::88@@
|
|
||||||
888 M:::::::MM:::::::::::::::::::MM::M::::::::::::::::*8
|
|
||||||
888 MM:::::::MMM::::::::::::::::MM:::MM:::::::::::::::M
|
|
||||||
88 M::::::::MMMM:::::::::::MMMM:::::MM::::::::::::MM
|
|
||||||
88 MM:::::::::MMMMMMMMMMMMMMM::::::::MMM::::::::MMM
|
|
||||||
88 MM::::::::::::MMMMMMM::::::::::::::MMMMMMMMMM
|
|
||||||
88 8MM::::::::::::::::::::::::::::::::::MMMMMM
|
|
||||||
~
|
|
||||||
E
|
|
||||||
January~
|
|
||||||
. 8888 8888888
|
|
||||||
888888888888888888888888
|
|
||||||
8888:::8888888888888888888888888
|
|
||||||
8888::::::8888888888888888888888888888
|
|
||||||
88::::::::888:::8888888888888888888888888
|
|
||||||
88888888::::8:::::::::::88888888888888888888
|
|
||||||
888 8::888888::::::::::::::::::88888888888 888
|
|
||||||
88::::88888888::::m::::::::::88888888888 8
|
|
||||||
888888888888888888:M:::::::::::8888888888888
|
|
||||||
88888888888888888888::::::::::::M88888888888888
|
|
||||||
8888888888888888888888:::::::::M8888888888888888
|
|
||||||
8888888888888888888888:::::::M888888888888888888
|
|
||||||
8888888888888888::88888::::::M88888888888888888888
|
|
||||||
88888888888888888:::88888:::::M888888888888888 8888
|
|
||||||
88888888888888888:::88888::::M::;o*M*o;888888888 88
|
|
||||||
88888888888888888:::8888:::::M:::::::::::88888888 8
|
|
||||||
88888888888888888::::88::::::M:;:::::::::::888888888
|
|
||||||
8888888888888888888:::8::::::M::aAa::::::::M8888888888 8
|
|
||||||
88 8888888888::88::::8::::M:::::::::::::888888888888888 8888
|
|
||||||
88 88888888888:::8:::::::::M::::::::::;::88:88888888888888888
|
|
||||||
8 8888888888888:::::::::::M::"@@@::::8w8888888888888888
|
|
||||||
88888888888:888::::::::::M:::::":::::M8i888888888888888
|
|
||||||
8888888888::::88:::::::::M88:::::::::::::M88z88888888888888888
|
|
||||||
8888888888:::::8:::::::::M88888:::::::::MM888!888888888888888888
|
|
||||||
888888888:::::8:::::::::M8888888MAmmmAMVMM888*88888888 88888888
|
|
||||||
888888 M:::::::::::::::M888888888:::::::MM88888888888888 8888888
|
|
||||||
8888 M::::::::::::::M88888888888::::::MM888888888888888 88888
|
|
||||||
888 M:::::::::::::M8888888888888M:::::mM888888888888888 8888
|
|
||||||
888 M::::::::::::M8888:888888888888::::m::Mm88888 888888 8888
|
|
||||||
88 M::::::::::::8888:88888888888888888::::::Mm8 88888 888
|
|
||||||
88 M::::::::::8888M::88888::888888888888:::::::Mm88888 88
|
|
||||||
8 MM::::::::8888M:::8888:::::888888888888::::::::Mm8 4
|
|
||||||
8M:::::::8888M:::::888:::::::88:::8888888::::::::Mm 2
|
|
||||||
88MM:::::8888M:::::::88::::::::8:::::888888:::M:::::M
|
|
||||||
8888M:::::888MM::::::::8:::::::::::M::::8888::::M::::M
|
|
||||||
88888M:::::88:M::::::::::8:::::::::::M:::8888::::::M::M
|
|
||||||
88 888MM:::888:M:::::::::::::::::::::::M:8888:::::::::M:
|
|
||||||
8 88888M:::88::M:::::::::::::::::::::::MM:88::::::::::::M
|
|
||||||
88888M:::88::M::::::::::*88*::::::::::M:88::::::::::::::M
|
|
||||||
888888M:::88::M:::::::::88@8:::::::::M::88::::::::::::::M
|
|
||||||
888888MM::88::MM::::::::88@8:::::::::M:::8::::::::::::::*8
|
|
||||||
88888 M:::8::MM:::::::::*88*::::::::::M:::::::::::::::::88@
|
|
||||||
8888 MM::::::MM:::::::::::::::::::::MM:::::::::::::::::88@
|
|
||||||
888 M:::::::MM:::::::::::::::::::MM::M::::::::::::::::*8
|
|
||||||
888 MM:::::::MMM::::::::::::::::MM:::MM:::::::::::::::M
|
|
||||||
88 M::::::::MMMM:::::::::::MMMM:::::MM::::::::::::MM
|
|
||||||
88 MM:::::::::MMMMMMMMMMMMMMM::::::::MMM::::::::MMM
|
|
||||||
88 MM::::::::::::MMMMMMM::::::::::::::MMMMMMMMMM
|
|
||||||
88 8MM::::::::::::::::::::::::::::::::::MMMMMM
|
|
||||||
~
|
|
||||||
E
|
|
||||||
february~
|
february~
|
||||||
. :AMMMMMMMMMMMMA:
|
. :AMMMMMMMMMMMMA:
|
||||||
:AMMMMMMMMMHHHHHMMMMMMMMA:
|
:AMMMMMMMMMHHHHHMMMMMMMMA:
|
||||||
|
@ -1492,7 +1327,184 @@ february~
|
||||||
[;:: : ;;:; ; ; ;
|
[;:: : ;;:; ; ; ;
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
March~
|
January~
|
||||||
|
. 8888 8888888
|
||||||
|
888888888888888888888888
|
||||||
|
8888:::8888888888888888888888888
|
||||||
|
8888::::::8888888888888888888888888888
|
||||||
|
88::::::::888:::8888888888888888888888888
|
||||||
|
88888888::::8:::::::::::88888888888888888888
|
||||||
|
888 8::888888::::::::::::::::::88888888888 888
|
||||||
|
88::::88888888::::m::::::::::88888888888 8
|
||||||
|
888888888888888888:M:::::::::::8888888888888
|
||||||
|
88888888888888888888::::::::::::M88888888888888
|
||||||
|
8888888888888888888888:::::::::M8888888888888888
|
||||||
|
8888888888888888888888:::::::M888888888888888888
|
||||||
|
8888888888888888::88888::::::M88888888888888888888
|
||||||
|
88888888888888888:::88888:::::M888888888888888 8888
|
||||||
|
88888888888888888:::88888::::M::;o*M*o;888888888 88
|
||||||
|
88888888888888888:::8888:::::M:::::::::::88888888 8
|
||||||
|
88888888888888888::::88::::::M:;:::::::::::888888888
|
||||||
|
8888888888888888888:::8::::::M::aAa::::::::M8888888888 8
|
||||||
|
88 8888888888::88::::8::::M:::::::::::::888888888888888 8888
|
||||||
|
88 88888888888:::8:::::::::M::::::::::;::88:88888888888888888
|
||||||
|
8 8888888888888:::::::::::M::"@@@::::8w8888888888888888
|
||||||
|
88888888888:888::::::::::M:::::":::::M8i888888888888888
|
||||||
|
8888888888::::88:::::::::M88:::::::::::::M88z88888888888888888
|
||||||
|
8888888888:::::8:::::::::M88888:::::::::MM888!888888888888888888
|
||||||
|
888888888:::::8:::::::::M8888888MAmmmAMVMM888*88888888 88888888
|
||||||
|
888888 M:::::::::::::::M888888888:::::::MM88888888888888 8888888
|
||||||
|
8888 M::::::::::::::M88888888888::::::MM888888888888888 88888
|
||||||
|
888 M:::::::::::::M8888888888888M:::::mM888888888888888 8888
|
||||||
|
888 M::::::::::::M8888:888888888888::::m::Mm88888 888888 8888
|
||||||
|
88 M::::::::::::8888:88888888888888888::::::Mm8 88888 888
|
||||||
|
88 M::::::::::8888M::88888::888888888888:::::::Mm88888 88
|
||||||
|
8 MM::::::::8888M:::8888:::::888888888888::::::::Mm8 4
|
||||||
|
8M:::::::8888M:::::888:::::::88:::8888888::::::::Mm 2
|
||||||
|
88MM:::::8888M:::::::88::::::::8:::::888888:::M:::::M
|
||||||
|
8888M:::::888MM::::::::8:::::::::::M::::8888::::M::::M
|
||||||
|
88888M:::::88:M::::::::::8:::::::::::M:::8888::::::M::M
|
||||||
|
88 888MM:::888:M:::::::::::::::::::::::M:8888:::::::::M:
|
||||||
|
8 88888M:::88::M:::::::::::::::::::::::MM:88::::::::::::M
|
||||||
|
88888M:::88::M::::::::::*88*::::::::::M:88::::::::::::::M
|
||||||
|
888888M:::88::M:::::::::88@8:::::::::M::88::::::::::::::M
|
||||||
|
888888MM::88::MM::::::::88@8:::::::::M:::8::::::::::::::*8
|
||||||
|
88888 M:::8::MM:::::::::*88*::::::::::M:::::::::::::::::88@
|
||||||
|
8888 MM::::::MM:::::::::::::::::::::MM:::::::::::::::::88@
|
||||||
|
888 M:::::::MM:::::::::::::::::::MM::M::::::::::::::::*8
|
||||||
|
888 MM:::::::MMM::::::::::::::::MM:::MM:::::::::::::::M
|
||||||
|
88 M::::::::MMMM:::::::::::MMMM:::::MM::::::::::::MM
|
||||||
|
88 MM:::::::::MMMMMMMMMMMMMMM::::::::MMM::::::::MMM
|
||||||
|
88 MM::::::::::::MMMMMMM::::::::::::::MMMMMMMMMM
|
||||||
|
88 8MM::::::::::::::::::::::::::::::::::MMMMMM
|
||||||
|
~
|
||||||
|
E
|
||||||
|
may~
|
||||||
|
. 8888 8888888
|
||||||
|
888888888888888888888888
|
||||||
|
8888:::8888888888888888888888888
|
||||||
|
8888::::::8888888888888888888888888888
|
||||||
|
88::::::::888:::8888888888888888888888888
|
||||||
|
88888888::::8:::::::::::88888888888888888888
|
||||||
|
888 8::888888::::::::::::::::::88888888888 888
|
||||||
|
88::::88888888::::m::::::::::88888888888 8
|
||||||
|
888888888888888888:M:::::::::::8888888888888
|
||||||
|
88888888888888888888::::::::::::M88888888888888
|
||||||
|
8888888888888888888888:::::::::M8888888888888888
|
||||||
|
8888888888888888888888:::::::M888888888888888888
|
||||||
|
8888888888888888::88888::::::M88888888888888888888
|
||||||
|
88888888888888888:::88888:::::M888888888888888 8888
|
||||||
|
88888888888888888:::88888::::M::;o*M*o;888888888 88
|
||||||
|
88888888888888888:::8888:::::M:::::::::::88888888 8
|
||||||
|
88888888888888888::::88::::::M:;:::::::::::888888888
|
||||||
|
8888888888888888888:::8::::::M::aAa::::::::M8888888888 8
|
||||||
|
88 8888888888::88::::8::::M:::::::::::::888888888888888 8888
|
||||||
|
88 88888888888:::8:::::::::M::::::::::;::88:88888888888888888
|
||||||
|
8 8888888888888:::::::::::M::"@@@@@@@"::::8w8888888888888888
|
||||||
|
88888888888:888::::::::::M:::::"@a@":::::M8i888888888888888
|
||||||
|
8888888888::::88:::::::::M88:::::::::::::M88z88888888888888888
|
||||||
|
8888888888:::::8:::::::::M88888:::::::::MM888!888888888888888888
|
||||||
|
888888888:::::8:::::::::M8888888MAmmmAMVMM888*88888888 88888888
|
||||||
|
888888 M:::::::::::::::M888888888:::::::MM88888888888888 8888888
|
||||||
|
8888 M::::::::::::::M88888888888::::::MM888888888888888 88888
|
||||||
|
888 M:::::::::::::M8888888888888M:::::mM888888888888888 8888
|
||||||
|
888 M::::::::::::M8888:888888888888::::m::Mm88888 888888 8888
|
||||||
|
88 M::::::::::::8888:88888888888888888::::::Mm8 88888 888
|
||||||
|
88 M::::::::::8888M::88888::888888888888:::::::Mm88888 88
|
||||||
|
8 MM::::::::8888M:::8888:::::888888888888::::::::Mm8 4
|
||||||
|
8M:::::::8888M:::::888:::::::88:::8888888::::::::Mm 2
|
||||||
|
88MM:::::8888M:::::::88::::::::8:::::888888:::M:::::M
|
||||||
|
8888M:::::888MM::::::::8:::::::::::M::::8888::::M::::M
|
||||||
|
88888M:::::88:M::::::::::8:::::::::::M:::8888::::::M::M
|
||||||
|
88 888MM:::888:M:::::::::::::::::::::::M:8888:::::::::M:
|
||||||
|
8 88888M:::88::M:::::::::::::::::::::::MM:88::::::::::::M
|
||||||
|
88888M:::88::M::::::::::*88*::::::::::M:88::::::::::::::M
|
||||||
|
888888M:::88::M:::::::::88@@88:::::::::M::88::::::::::::::M
|
||||||
|
888888MM::88::MM::::::::88@@88:::::::::M:::8::::::::::::::*8
|
||||||
|
88888 M:::8::MM:::::::::*88*::::::::::M:::::::::::::::::88@@
|
||||||
|
8888 MM::::::MM:::::::::::::::::::::MM:::::::::::::::::88@@
|
||||||
|
888 M:::::::MM:::::::::::::::::::MM::M::::::::::::::::*8
|
||||||
|
888 MM:::::::MMM::::::::::::::::MM:::MM:::::::::::::::M
|
||||||
|
88 M::::::::MMMM:::::::::::MMMM:::::MM::::::::::::MM
|
||||||
|
88 MM:::::::::MMMMMMMMMMMMMMM::::::::MMM::::::::MMM
|
||||||
|
88 MM::::::::::::MMMMMMM::::::::::::::MMMMMMMMMM
|
||||||
|
88 8MM::::::::::::::::::::::::::::::::::MMMMMM
|
||||||
|
~
|
||||||
|
E
|
||||||
|
june~
|
||||||
|
. :AMMMMMMMMMMMMA:
|
||||||
|
:AMMMMMMMMMHHHHHMMMMMMMMA:
|
||||||
|
:AMHMMMMHHMHIHHIMMMHMMMMHHA:
|
||||||
|
:AM'MMMMMMHHIHHHIMMMMMIMMHHHH:
|
||||||
|
AM:IMMMMMHHIHIHHHIMMHHHHHHHHHH
|
||||||
|
AMIIHMMMMMHIHHHIHHIHHHHHHHHHHHH:
|
||||||
|
MMIHHMMMMMHHIHHHIHHHHHHHHHHHHHHH
|
||||||
|
AMMMMMHHHHHHI;;;;;;;IHHHI;;IHHHHH
|
||||||
|
MMMMHIIII;":AMMMMA ,[[, HH
|
||||||
|
MMMMHII; AW"'''' :: HH
|
||||||
|
IHHIHIII;:'' ,GFMF[ [MM[: IH
|
||||||
|
AHHIHII;::': ";[P,[ ;; :::: IH
|
||||||
|
IHHHIHII;;:: :[;: ;H
|
||||||
|
AHHHHHII;;;:: : : [ : ;H
|
||||||
|
IHHIIHI:[;;;:: ; ; ; , , IH
|
||||||
|
IHHIIHH:[;;;: ; ;: ':"::" '; IH
|
||||||
|
IHHIIHI:[;;: ::: ; ,,,, ' HH
|
||||||
|
:IHHHIHHMMA;::: [;;""""""[; AMI
|
||||||
|
;IHHHHIIHMM;: : : ;;[,,,,[; HHI
|
||||||
|
IIHHMMHHIHHM;:: '"""' AMHI
|
||||||
|
IIHHMMHMHHIIIM;:: AMMHI
|
||||||
|
IHHHMMHMHMHHHIHI;:: :AMMMHI
|
||||||
|
IHHHMMMMHMMHHHII;;;;:: :,;; MMMHHI
|
||||||
|
IHHHMMHHHHMMHHHI;:";;;;;;" MMMIH'
|
||||||
|
;IHHMMHMMMMHF"HHII MMMHH
|
||||||
|
IHHMMHV;;:: HHII;: : MMHHI
|
||||||
|
IHHMV;;::: HHII;: : : MMHI;
|
||||||
|
IHMV;;:: : "HII;: :: MMI;
|
||||||
|
:IHV;:: : 'HI: :: MM;
|
||||||
|
IV;:: : : "II;: ;
|
||||||
|
IH;;::: : ;;;I: ;
|
||||||
|
;M;;:::: : ';;;HI: '
|
||||||
|
MH;;:::: : ';;HI: ;
|
||||||
|
IM;;;::: : :[; ';I"I: ;
|
||||||
|
M;;;::: : : [;;,: ' : '
|
||||||
|
;;:::: : ::'' : ':
|
||||||
|
;;::: : : ': :
|
||||||
|
:;;:: : :: ':'
|
||||||
|
;;:: : : : '':
|
||||||
|
;;:: : : :;,:
|
||||||
|
;;:: : :: ;[[[,:
|
||||||
|
:;;:: : : ;;[[[;':
|
||||||
|
;;:: : : [:: : : ;[[[[;;[,
|
||||||
|
;:: : [;;;: : :, [[[[['[[;
|
||||||
|
;:: : :M;;: : :,[ [[[[ [['
|
||||||
|
;: : "[:: : ::[ ;[' ;[
|
||||||
|
;: : "[: : ::[ :' :'
|
||||||
|
:: :: : ", :::;[ :' :;
|
||||||
|
: :: ': : :::;[ ::' :;
|
||||||
|
:: ; : : ::::;[:,,::;;I' ;;
|
||||||
|
;;:;: : : : :::::::: '""' I[[;"'
|
||||||
|
;;;:: : : '::::' ;
|
||||||
|
;;;:: : : : ;
|
||||||
|
';;;;::: : : ': ;
|
||||||
|
';;:::: : :
|
||||||
|
M;:::: : ':
|
||||||
|
MMMI;:::: : ;
|
||||||
|
MMMMMA;::: :
|
||||||
|
AHHMMMMHA;:::: : ;
|
||||||
|
:MHHMMMMMMMA;: ' :
|
||||||
|
AHHHMMM;"TTTTL: : ;
|
||||||
|
AHHHHHHMMLLLLLH ': :
|
||||||
|
:MHHH:::;HHMMMMMA: : ;
|
||||||
|
:AHHH:::HH;;;;;MMM;: :
|
||||||
|
:MHH;: ;;;;;MMM:: : : ;
|
||||||
|
:MH;: : ';;;;MMM:: ': ':
|
||||||
|
,H;: ';;;MMM::: :':' ;
|
||||||
|
,;: : : : ;;;Y;H:: :
|
||||||
|
,;: : : : ';;;:; : : ; ;
|
||||||
|
[;:: : ;;:; ; ; ;
|
||||||
|
~
|
||||||
|
E
|
||||||
|
july~
|
||||||
. ,.--..
|
. ,.--..
|
||||||
,::.'.. . . "VI:I:".':-.,.
|
,::.'.. . . "VI:I:".':-.,.
|
||||||
,I::. .. . 'VHMHII:.::;:.:,..
|
,I::. .. . 'VHMHII:.::;:.:,..
|
||||||
|
@ -1558,7 +1570,7 @@ March~
|
||||||
':::.:... ..I::I::.:....:. .: .. ...::. . . III:II:. '
|
':::.:... ..I::I::.:....:. .: .. ...::. . . III:II:. '
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
april~
|
august~
|
||||||
. nHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHn.
|
. nHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHn.
|
||||||
.MS?MMMMMMMMMMMMMMMMMM?MM-MMMMMMMMMSHMMMMMMM
|
.MS?MMMMMMMMMMMMMMMMMM?MM-MMMMMMMMMSHMMMMMMM
|
||||||
MMMMMH?MMMMMMMX*MM?MMX%MM/MMMMMM"HMMMMMMMMMMMM
|
MMMMMH?MMMMMMMX*MM?MMX%MM/MMMMMM"HMMMMMMMMMMMM
|
||||||
|
@ -1611,8 +1623,8 @@ april~
|
||||||
%% % %%%%%%
|
%% % %%%%%%
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
june~
|
september~
|
||||||
. .:IIIIHIHHIHHHII::I:.
|
. .:IIIIHIHHIHHHII::I:.
|
||||||
:IIIIHIHHHHHHMMHHIHHIIHHIII:.
|
:IIIIHIHHHHHHMMHHIHHIIHHIII:.
|
||||||
,.:HIHHHHHHHHHHHHHHHHHHHHHIHIHHII:.
|
,.:HIHHHHHHHHHHHHHHHHHHHHHIHIHHII:.
|
||||||
.:IIHHHHHHHHMMMMMHHHHMMMHHMHHHIIIHIIII:
|
.:IIHHHHHHHHMMMMMHHHHMMMHHMHHHIIIHIIII:
|
||||||
|
@ -1669,18 +1681,6 @@ IHHHHMHMMMMMMMHHHHHI:IT:TI:..:HI:.. ..:. . :IHII
|
||||||
::.:............. .. . ...AHIHIIIIIHHHI::""' 'VII:.. .. .
|
::.:............. .. . ...AHIHIIIIIHHHI::""' 'VII:.. .. .
|
||||||
::.:.:.......... .. . ...HHHIIIIIIHHHI::. . 'VII::. . . ,
|
::.:.:.......... .. . ...HHHIIIIIIHHHI::. . 'VII::. . . ,
|
||||||
':::.:.:..... .. . . . ..:MHHIHIIIII:I::. . 'VII:::. .. .
|
':::.:.:..... .. . . . ..:MHHIHIIIII:I::. . 'VII:::. .. .
|
||||||
:::::.:..:.... . . . ...AHHHHIHIIII:::. . 'VII:::. . . :.
|
|
||||||
:::::::.:..... .. . ....MHHHHHIHIII::.:.. . 'VII::. . ::
|
|
||||||
:::::::::.:.... .. ....:MHHHHIHII:I::::... . 'VI::. . ::I)
|
|
||||||
'::::::::::.:... .. ...:MHHHHIHIIII::::.. . 'VI:. ...:V
|
|
||||||
.:::::::::::.:.... . .AMMHHIHIII:I::::... . . I::. ...:-"
|
|
||||||
:.::I::::::::.:. . ..MMMHHIHIIII:I:::... . . .::. ,..-"
|
|
||||||
:..:II:I:::::.:.. . ..MMMHHIHIIIIIII:I::.... . . ..::""'
|
|
||||||
.::.:III:I::::::.:.. ..MMMMIVHIHIIIII:I::::.... . .....:,
|
|
||||||
.:.::..:III:I:::::.:... .MMHMAIVHHIHIIIII:I::::.. . ..::..:,
|
|
||||||
. .:::.::III:I::::.:... .VMMHMAIVHHHIHIIII:I::::.. ..:...:::
|
|
||||||
. :::I.:::III:I:::.::.. .:MMHHMAIVHHIHIIIII:I::::....:::.::::
|
|
||||||
.::IIH.:::III:I::::.:.. .MMHMHMAIVHHHIHIIIIII:I
|
|
||||||
~
|
~
|
||||||
#186
|
#186
|
||||||
scroll poem irish~
|
scroll poem irish~
|
||||||
|
@ -1712,6 +1712,20 @@ mushrooms~
|
||||||
The mushrooms appear not to be poisonous and are relatively clean. They look
|
The mushrooms appear not to be poisonous and are relatively clean. They look
|
||||||
edible.
|
edible.
|
||||||
~
|
~
|
||||||
|
#188
|
||||||
|
iron bound wooden chest~
|
||||||
|
an iron bound chest~
|
||||||
|
A large wooden chest with bands of iron circling it is closed with its lock hanging open.~
|
||||||
|
~
|
||||||
|
15 0 0 0 0 a 0 0 0 0 0 0 0
|
||||||
|
50 5 -1 0
|
||||||
|
50 0 0 0
|
||||||
|
E
|
||||||
|
iron bound wooden chest~
|
||||||
|
The chest is in excellent condition. Made from a fine grain of wood it is
|
||||||
|
stained and polished to a shine. Bands of iron to wrap around the chest. But,
|
||||||
|
the lock hangs open.
|
||||||
|
~
|
||||||
#190
|
#190
|
||||||
potion deep green remove curse~
|
potion deep green remove curse~
|
||||||
a potion of remove curse~
|
a potion of remove curse~
|
||||||
|
|
|
@ -679,7 +679,7 @@ A postal worker's shotgun is beckoning you.~
|
||||||
5 0 0 0 0 ano 0 0 0 0 0 0 0
|
5 0 0 0 0 ano 0 0 0 0 0 0 0
|
||||||
1 1 1 12
|
1 1 1 12
|
||||||
1 1 0 0
|
1 1 0 0
|
||||||
T 1361
|
T 45
|
||||||
E
|
E
|
||||||
shotgun~
|
shotgun~
|
||||||
A shotgun with the emblem of the USPS on the hilt.
|
A shotgun with the emblem of the USPS on the hilt.
|
||||||
|
@ -698,20 +698,6 @@ ruby slippers~
|
||||||
The depp red slippers sparkle with magic and energy. They are rumored to be
|
The depp red slippers sparkle with magic and energy. They are rumored to be
|
||||||
able to take you home if you say there is no place like home.
|
able to take you home if you say there is no place like home.
|
||||||
~
|
~
|
||||||
#1396
|
|
||||||
quarter coin~
|
|
||||||
a quarter~
|
|
||||||
A typical U.S. quarter that appears to be perfect for flipping.~
|
|
||||||
~
|
|
||||||
12 0 0 0 0 a 0 0 0 0 0 0 0
|
|
||||||
0 0 0 0
|
|
||||||
1 1 0 0
|
|
||||||
T 1393
|
|
||||||
E
|
|
||||||
coin quarter~
|
|
||||||
This quarter is perfect for deciding those difficult boolean questions you
|
|
||||||
may have. Just "flip quarter"
|
|
||||||
~
|
|
||||||
#1397
|
#1397
|
||||||
christmas poem soldiers~
|
christmas poem soldiers~
|
||||||
a soldiers christmas poem~
|
a soldiers christmas poem~
|
||||||
|
|
|
@ -22,6 +22,27 @@ CircleMUD v3.0 Shop File~
|
||||||
28
|
28
|
||||||
0
|
0
|
||||||
0
|
0
|
||||||
|
#1~
|
||||||
|
-1
|
||||||
|
1.00
|
||||||
|
1.00
|
||||||
|
-1
|
||||||
|
%s Sorry, I don't stock that item.~
|
||||||
|
%s You don't seem to have that.~
|
||||||
|
%s I don't trade in such items.~
|
||||||
|
%s I can't afford that!~
|
||||||
|
%s You are too poor!~
|
||||||
|
%s That'll be %d coins, thanks.~
|
||||||
|
%s I'll give you %d coins for that.~
|
||||||
|
0
|
||||||
|
0
|
||||||
|
-1
|
||||||
|
0
|
||||||
|
-1
|
||||||
|
0
|
||||||
|
28
|
||||||
|
0
|
||||||
|
0
|
||||||
#99~
|
#99~
|
||||||
91
|
91
|
||||||
92
|
92
|
||||||
|
|
|
@ -8,7 +8,7 @@ Non-attachable trigger~
|
||||||
Mob Tutorial Example Quest Offer - M14~
|
Mob Tutorial Example Quest Offer - M14~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A very basic 3 trigger receive quest. Trigs 1-3.
|
* A very basic 3 trigger receive quest. Trigs 1-3.
|
||||||
* Make sure the actor is a player first.
|
* Make sure the actor is a player first.
|
||||||
if %actor.is_pc%
|
if %actor.is_pc%
|
||||||
|
@ -30,7 +30,7 @@ end
|
||||||
Mob Tutorial Example Kill Ogre - 16~
|
Mob Tutorial Example Kill Ogre - 16~
|
||||||
0 f 100
|
0 f 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A very basic 3 trigger receive quest. Trigs 1-3.
|
* A very basic 3 trigger receive quest. Trigs 1-3.
|
||||||
say you got the best of me %actor.name%. But I'll be back.
|
say you got the best of me %actor.name%. But I'll be back.
|
||||||
* Load the wings to be returned to the questmaster.
|
* Load the wings to be returned to the questmaster.
|
||||||
|
@ -42,7 +42,7 @@ say you got the best of me %actor.name%. But I'll be back.
|
||||||
Mob Tutorial Example Completion - 14~
|
Mob Tutorial Example Completion - 14~
|
||||||
0 j 100
|
0 j 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A very basic 3 trigger receive quest. Trigs 1-3.
|
* A very basic 3 trigger receive quest. Trigs 1-3.
|
||||||
* Check if this was indeed the right object.
|
* Check if this was indeed the right object.
|
||||||
if %object.vnum% == 1
|
if %object.vnum% == 1
|
||||||
|
@ -64,7 +64,7 @@ end
|
||||||
Tutorial II Guard Greet - 24~
|
Tutorial II Guard Greet - 24~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
||||||
* This is a N S road so only greet players arriving from the south.
|
* This is a N S road so only greet players arriving from the south.
|
||||||
if %direction% == south && %actor.is_pc%
|
if %direction% == south && %actor.is_pc%
|
||||||
|
@ -78,7 +78,7 @@ end
|
||||||
Tutorial II Guard Bribe 10 - 24~
|
Tutorial II Guard Bribe 10 - 24~
|
||||||
0 m 1
|
0 m 1
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
||||||
* This is a comment. Always use amplifying comments to explain your Triggers!
|
* This is a comment. Always use amplifying comments to explain your Triggers!
|
||||||
* If actor gives 10 coins or more.
|
* If actor gives 10 coins or more.
|
||||||
|
@ -108,7 +108,7 @@ end
|
||||||
Obj Command Magic Eight Ball - O47~
|
Obj Command Magic Eight Ball - O47~
|
||||||
1 c 2
|
1 c 2
|
||||||
shake~
|
shake~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Numeric Arg: 2 means in character's carried inventory.
|
* Numeric Arg: 2 means in character's carried inventory.
|
||||||
* Command trigs do not work for level 32 and above.
|
* Command trigs do not work for level 32 and above.
|
||||||
* There are 20 possible answers that the Magic Eight Ball can give.
|
* There are 20 possible answers that the Magic Eight Ball can give.
|
||||||
|
@ -203,7 +203,7 @@ end
|
||||||
Tutorial II Guard Closes Gate - 24~
|
Tutorial II Guard Closes Gate - 24~
|
||||||
0 e 0
|
0 e 0
|
||||||
The gate is opened from~
|
The gate is opened from~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
||||||
* This is required to close the gate after someone opens it from the other
|
* This is required to close the gate after someone opens it from the other
|
||||||
* side.
|
* side.
|
||||||
|
@ -216,7 +216,7 @@ lock gate
|
||||||
Tutorial II Guard Closes Gate 2 - 24~
|
Tutorial II Guard Closes Gate 2 - 24~
|
||||||
0 e 0
|
0 e 0
|
||||||
leaves north.~
|
leaves north.~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
* A basic guard bribe trigger. Trigs 4, 5, 7, 8.
|
||||||
* This is required to close the gate after the guard is bribed and someone
|
* This is required to close the gate after the guard is bribed and someone
|
||||||
* leaves to the north.
|
* leaves to the north.
|
||||||
|
@ -229,7 +229,7 @@ lock gate
|
||||||
Tutorial Quest 1317 - Starter~
|
Tutorial Quest 1317 - Starter~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Quest Trigs 9-12. If the player comes from the south and has not done the quest.
|
* Quest Trigs 9-12. If the player comes from the south and has not done the quest.
|
||||||
if %direction% == south
|
if %direction% == south
|
||||||
if %actor.varexists(solved_tutorial_quest_zone_0)%
|
if %actor.varexists(solved_tutorial_quest_zone_0)%
|
||||||
|
@ -247,7 +247,7 @@ end
|
||||||
Tutorial Quest 1317 - Accept~
|
Tutorial Quest 1317 - Accept~
|
||||||
0 d 1
|
0 d 1
|
||||||
yes~
|
yes~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Quest Trigs 9-12. If the player has not done the quest give them a hint.
|
* Quest Trigs 9-12. If the player has not done the quest give them a hint.
|
||||||
if !%actor.varexists(solved_tutorial_quest_zone_0)%
|
if !%actor.varexists(solved_tutorial_quest_zone_0)%
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
|
@ -261,32 +261,32 @@ end
|
||||||
Tutorial Quest 1317 - Completion~
|
Tutorial Quest 1317 - Completion~
|
||||||
0 j 100
|
0 j 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Quest Trigs 9-12. If the player returns the right object reward them.
|
* Quest Trigs 9-12. If the player returns the right object reward them.
|
||||||
if !%actor.varexists(solved_tutorial_quest_zone_0)% && %object.vnum% == 1394
|
if !%actor.varexists(solved_tutorial_quest_zone_0)% && %object.vnum% == 1394
|
||||||
dance
|
set solved_tutorial_quest_zone_0 1
|
||||||
wait 1 sec
|
remote solved_tutorial_quest_zone_0 %actor.id%
|
||||||
say Thank you, %actor.name%.
|
%purge% %object%
|
||||||
nop %actor.exp(50)%
|
dance
|
||||||
nop %actor.gold(50)%
|
wait 1 sec
|
||||||
say finally, now I can get some answers.
|
say Thank you, %actor.name%.
|
||||||
wait 1 sec
|
nop %actor.exp(50)%
|
||||||
emote shakes the magic eight ball vigorously.
|
nop %actor.gold(50)%
|
||||||
wait 1 sec
|
say finally, now I can get some answers.
|
||||||
emote does not seem too pleased with his answer.
|
wait 1 sec
|
||||||
set solved_tutorial_quest_zone_0 1
|
emote shakes the magic eight ball vigorously.
|
||||||
remote solved_tutorial_quest_zone_0 %actor.id%
|
wait 1 sec
|
||||||
%purge% %object%
|
emote does not seem too pleased with his answer.
|
||||||
else
|
else
|
||||||
say I don't want that!
|
say I don't want that!
|
||||||
junk %object.name%
|
junk %object.name%
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#12
|
#12
|
||||||
Tutorial Quest 1441 - Load 8ball~
|
Tutorial Quest 1441 - Load 8ball~
|
||||||
2 g 100
|
2 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Quest Trigs 9-12. Drop the 8ball on their head when they enter.
|
* Quest Trigs 9-12. Drop the 8ball on their head when they enter.
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
%echoaround% %actor.name% A magic eight ball drops from the sky striking %actor.name% on the head.
|
%echoaround% %actor.name% A magic eight ball drops from the sky striking %actor.name% on the head.
|
||||||
|
@ -309,7 +309,7 @@ end
|
||||||
Restorative Comfy Bed 1401 - Heal~
|
Restorative Comfy Bed 1401 - Heal~
|
||||||
1 b 100
|
1 b 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Healing Bed Trigs 13-15. Heals those who sleep on it.
|
* Healing Bed Trigs 13-15. Heals those who sleep on it.
|
||||||
set room_var %actor.room%
|
set room_var %actor.room%
|
||||||
set target_char %room_var.people%
|
set target_char %room_var.people%
|
||||||
|
@ -336,7 +336,7 @@ end
|
||||||
Damage Example~
|
Damage Example~
|
||||||
2 g 100
|
2 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* First put a wait in so the echo waits for the player to get into the room.
|
* First put a wait in so the echo waits for the player to get into the room.
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
%echo% As %actor.name% enters the room a bolt of lightning smites %actor.himher%.
|
%echo% As %actor.name% enters the room a bolt of lightning smites %actor.himher%.
|
||||||
|
@ -410,7 +410,7 @@ end
|
||||||
Switch Echo Example~
|
Switch Echo Example~
|
||||||
2 g 100
|
2 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* put a wait in here so it doesn't fire before the player enters the room
|
* put a wait in here so it doesn't fire before the player enters the room
|
||||||
wait 1
|
wait 1
|
||||||
switch %random.3%
|
switch %random.3%
|
||||||
|
@ -442,7 +442,7 @@ done
|
||||||
AT Example~
|
AT Example~
|
||||||
2 b 100
|
2 b 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* put a wait in here so it doesn't fire before the player enters the room
|
* put a wait in here so it doesn't fire before the player enters the room
|
||||||
%at% 33 %echo% at'd to a room
|
%at% 33 %echo% at'd to a room
|
||||||
%at% Rumble %echo% at'd to Rumble
|
%at% Rumble %echo% at'd to Rumble
|
||||||
|
@ -451,7 +451,7 @@ AT Example~
|
||||||
Rumble's Spy~
|
Rumble's Spy~
|
||||||
0 d 100
|
0 d 100
|
||||||
*~
|
*~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* put a wait in here so it doesn't fire before the player enters the room
|
* put a wait in here so it doesn't fire before the player enters the room
|
||||||
* Arguments: * means all speech will trigger this.
|
* Arguments: * means all speech will trigger this.
|
||||||
* This will echo all speech to Rumble.
|
* This will echo all speech to Rumble.
|
||||||
|
@ -461,16 +461,13 @@ Rumble's Spy~
|
||||||
Transform Example~
|
Transform Example~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* %transform% test
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* as a greet trigger, entering the room will cause
|
* As a greet trigger, entering the room will cause this mob to transform into
|
||||||
* the mob this is attached to, to toggle between mob 1 and 99.
|
* a random mob vnum 100-199.
|
||||||
say Beginning transform.
|
emote starts to twist and contort into something different.
|
||||||
if %self.vnum%==1
|
eval number %random.100% + 99
|
||||||
%transform% 99
|
%transform% %number%
|
||||||
else
|
say Transform complete to mob %number%.
|
||||||
%transform% -1
|
|
||||||
end
|
|
||||||
say Transform complete.
|
|
||||||
~
|
~
|
||||||
#22
|
#22
|
||||||
IF Example~
|
IF Example~
|
||||||
|
@ -541,32 +538,7 @@ end
|
||||||
While Damage Example - Grenade O1301~
|
While Damage Example - Grenade O1301~
|
||||||
1 h 100
|
1 h 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A small script to make a grenade go off 3 seconds after it is dropped.
|
|
||||||
* Set the rooms ID to a variable.
|
|
||||||
set room_var %actor.room%
|
|
||||||
wait 3 s
|
|
||||||
* Send a message when the bomb goes off.
|
|
||||||
%echo% The Grenade blasts into smithereens, striking everyone here.
|
|
||||||
* Target the first char.
|
|
||||||
set target_char %room_var.people%
|
|
||||||
* Now loop through everyone in the room and hurt them.
|
|
||||||
while %target_char%
|
|
||||||
%send% %actor% People: %target_char.name%
|
|
||||||
%send% %actor% Next_in_room: %self.next_in_room%
|
|
||||||
* Set the next target before this one perhaps dies.
|
|
||||||
set tmp_target %target_char.next_in_room%
|
|
||||||
* This is where the good/bad things are supposed to happen.
|
|
||||||
%send% %target_char% The explosion hurts you.
|
|
||||||
* Damage them... 30 hitpoints. To heal use -#.
|
|
||||||
%damage% %target_char% 30
|
|
||||||
* Set the next target.
|
|
||||||
set target_char %tmp_target%
|
|
||||||
* Loop back.
|
|
||||||
done
|
|
||||||
* After we go through everyone get rid of the grenade.
|
|
||||||
%purge% %self%
|
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
|
||||||
* A small script to make a grenade go off 3 seconds after it is dropped.
|
* A small script to make a grenade go off 3 seconds after it is dropped.
|
||||||
* Set the rooms ID to a variable.
|
* Set the rooms ID to a variable.
|
||||||
set room_var %actor.room%
|
set room_var %actor.room%
|
||||||
|
@ -594,7 +566,7 @@ done
|
||||||
Room While Teleport Example~
|
Room While Teleport Example~
|
||||||
2 b 100
|
2 b 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Target the first person or mob in the room.
|
* Target the first person or mob in the room.
|
||||||
eval person %self.people%
|
eval person %self.people%
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
|
@ -612,69 +584,98 @@ done
|
||||||
Command Example~
|
Command Example~
|
||||||
2 c 100
|
2 c 100
|
||||||
l~
|
l~
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* A command trigger to demonstrate basic usage. The Arg list 'l' will capture
|
||||||
|
* any 'l' word. We are looking specifically for the MUD command (all commands
|
||||||
|
* are listed under COMMANDS) 'look' with the abbreviated argument of 'window.'
|
||||||
if %cmd.mudcommand% == look && window /= %arg%
|
if %cmd.mudcommand% == look && window /= %arg%
|
||||||
%echo% %actor.name% %arg% at the %arg%.
|
%echo% %actor.name% typed %cmd% to %cmd.mudcommand% at the %arg%.
|
||||||
|
else
|
||||||
|
* Without this return zero a player would be unable to look at anything else
|
||||||
|
* in the room, leave, list, etc.
|
||||||
|
return 0
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#26
|
#26
|
||||||
Blocks Mobs Not Following~
|
Blocks Mobs Not Following~
|
||||||
2 g 100
|
2 g 100
|
||||||
~
|
~
|
||||||
* This trigger blocks all mobs except those that are charmed, pets, etc.
|
Name: 'Blocks Mobs Not Following', VNum: [ 26], RNum: [ 26]
|
||||||
|
Trigger Intended Assignment: Rooms
|
||||||
|
Trigger Type: Enter , Numeric Arg: 100, Arg list: None
|
||||||
|
Commands:
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* This trigger blocks all mobs except those that are following.
|
||||||
|
* If actor is a mob, !is_pc actually means not a PC.
|
||||||
if !%actor.is_pc%
|
if !%actor.is_pc%
|
||||||
* If the mob does not have a master than do not let it enter.
|
* If the mob does not have a master.
|
||||||
if !%actor.master%
|
if !%actor.master%
|
||||||
|
* Return 0 prevents the mob from entering.
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#27
|
#27
|
||||||
Character Variables Example~
|
Actor Variables Example~
|
||||||
0 b 100
|
0 b 100
|
||||||
~
|
~
|
||||||
* Variables Example by Rumble
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Random trigger so we must define actor
|
* A listing and demonstration of all actor variables.
|
||||||
|
* Random triggers do not have actors so we must define one.
|
||||||
set actor %random.char%
|
set actor %random.char%
|
||||||
* Make sure actor can be seen and is a player.
|
* Make sure the actor can be seen and is a player.
|
||||||
if %actor.canbeseen% && %actor.is_pc%
|
if %actor.canbeseen% && %actor.is_pc%
|
||||||
%echo% ACTOR.NAME: %actor.name%
|
|
||||||
%echo% AGE: %actor.age%
|
|
||||||
%echo% ALIAS: %actor.alias%
|
|
||||||
%echo% CANBESEEN: %actor.canbeseen%
|
|
||||||
%echo% CHARISMA: %actor.cha%
|
%echo% CHARISMA: %actor.cha%
|
||||||
%echo% CLASS: %actor.class%
|
|
||||||
%echo% CONSTITUTION: %actor.con%
|
%echo% CONSTITUTION: %actor.con%
|
||||||
%echo% DEXTERITY: %actor.dex%
|
%echo% DEXTERITY: %actor.dex%
|
||||||
|
%echo% INTELLIGENCE: %actor.int%
|
||||||
|
%echo% STRENGTH/STRADD: %actor.str%/%actor.stradd%
|
||||||
|
%echo% WISDOM: %actor.wis%
|
||||||
|
%echo% ALIAS: %actor.alias%
|
||||||
|
%echo% ALIGN: %actor.align%
|
||||||
|
%echo% AFFECT: %actor.affect%
|
||||||
|
%echo% CANBESEEN: %actor.canbeseen%
|
||||||
|
%echo% CLASS: %actor.class%
|
||||||
|
%echo% DRUNK: %actor.drunk%
|
||||||
%echo% EXPERIENCE: %actor.exp%
|
%echo% EXPERIENCE: %actor.exp%
|
||||||
%echo% FIGHTING: %actor.fighting%
|
%echo% FIGHTING: %actor.fighting%
|
||||||
%echo% GOLD: %actor.gold%
|
|
||||||
* %echo% HAS_ITEM: %actor.has_item(1300)%
|
|
||||||
%echo% ID: %actor.id%
|
|
||||||
%echo% INTELLIGENCE: %actor.int%
|
|
||||||
%echo% IS_KILLER: %actor.is_killer%
|
|
||||||
%echo% IS_THIEF: %actor.is_thief%
|
|
||||||
%echo% LEVEL: %actor.level%
|
|
||||||
%echo% HITPOINTS: %actor.hitp%
|
|
||||||
%echo% MANA: %actor.mana%
|
|
||||||
%echo% MOVEMENT POINTS: %actor.move%
|
|
||||||
%echo% MASTER: %actor.master%
|
|
||||||
%echo% FOLLOWER: %actor.follower%
|
%echo% FOLLOWER: %actor.follower%
|
||||||
%echo% MAX HITPOINTS: %actor.maxhitp%
|
%echo% GOLD: %actor.gold%
|
||||||
%echo% MAX MANA: %actor.maxmana%
|
%echo% HAS_ITEM: %actor.has_item(1332)%
|
||||||
%echo% MAX MOVE: %actor.maxmove%
|
|
||||||
%echo% NEXT_IN_ROOM: %actor.next_in_room%
|
|
||||||
%echo% PRACTICES %actor.prac%
|
|
||||||
%echo% ROOM: %actor.room%
|
|
||||||
%echo% SEX: %actor.sex%
|
|
||||||
%echo% HISHER: %actor.hisher%
|
|
||||||
%echo% HESHE: %actor.heshe%
|
%echo% HESHE: %actor.heshe%
|
||||||
%echo% HIMHER: %actor.himher%
|
%echo% HIMHER: %actor.himher%
|
||||||
%echo% INVENTORY: %actor.inventory%
|
%echo% HISHER: %actor.hisher%
|
||||||
|
%echo% HITPOINTS: %actor.hitp%
|
||||||
|
%echo% HUNGER: %actor.hunger%
|
||||||
|
%echo% ID: %actor.id%
|
||||||
|
%echo% INV: %actor.inventory%
|
||||||
|
%echo% IS_KILLER: %actor.is_killer%
|
||||||
|
%echo% IS_PC: %actor.is_pc%
|
||||||
|
%echo% IS_THIEF: %actor.is_thief%
|
||||||
|
%echo% LEVEL: %actor.level%
|
||||||
|
%echo% MANA: %actor.mana%
|
||||||
|
%echo% MASTER: %actor.master%
|
||||||
|
%echo% MAX HP: %actor.maxhitp%
|
||||||
|
%echo% MAX MANA: %actor.maxmana%
|
||||||
|
%echo% MAX MOVE: %actor.maxmove%
|
||||||
|
%echo% MOVE: %actor.move%
|
||||||
|
%echo% NAME: %actor.name%
|
||||||
|
%echo% NEXT_IN_ROOM: %actor.next_in_room%
|
||||||
|
%echo% POSITION: %actor.pos%
|
||||||
|
%echo% PRACTICES: %actor.prac%
|
||||||
|
%echo% QUESTPOINTS: %actor.questpoints%
|
||||||
|
%echo% ROOM: %actor.room%
|
||||||
|
%echo% SAVING_PARA: %actor.saving_para%
|
||||||
|
%echo% SAVING_ROD: %actor.saving_rod%
|
||||||
|
%echo% SAVING_PETRI: %actor.saving_petri%
|
||||||
|
%echo% SAVING_BREATH: %actor.saving_breath%
|
||||||
|
%echo% SAVING_SPELL: %actor.saving_spell%
|
||||||
|
%echo% SEX: %actor.sex%
|
||||||
%echo% SKILL BACKSTAB: %actor.skill(backstab)%
|
%echo% SKILL BACKSTAB: %actor.skill(backstab)%
|
||||||
%echo% STRENGTH/STRADD: %actor.str%/%actor.stradd%
|
%echo% THIRST: %actor.thirst%
|
||||||
%echo% TITLE: %actor.title%
|
%echo% TITLE: %actor.title%
|
||||||
|
%echo% VAREXISTS: %actor.varexists(tba_greeting)%
|
||||||
%echo% VNUM: %actor.vnum%
|
%echo% VNUM: %actor.vnum%
|
||||||
%echo% WISDOM: %actor.wis%
|
|
||||||
%echo% WEIGHT: %actor.weight%
|
%echo% WEIGHT: %actor.weight%
|
||||||
* Objects TSTAT 28, Rooms TSTAT 29, Text TSTAT 30, Special TSTAT 31.
|
* Objects TSTAT 28, Rooms TSTAT 29, Text TSTAT 30, Special TSTAT 31.
|
||||||
*
|
*
|
||||||
|
@ -693,9 +694,19 @@ end
|
||||||
Object Variables Example~
|
Object Variables Example~
|
||||||
1 b 100
|
1 b 100
|
||||||
~
|
~
|
||||||
* By Rumble
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* A listing and demonstration of all object variables.
|
||||||
|
%echo% CARRIED_BY: %self.carried_by%
|
||||||
|
%echo% CONTENTS: %self.contents%
|
||||||
|
%echo% COST: %self.cost%
|
||||||
|
%echo% COST_PER_DAY: %self.cost_per_day%
|
||||||
|
%echo% COUNT: %self.count%
|
||||||
|
%echo% HAS_IN: %self.has_in%
|
||||||
%echo% ID: %self.id%
|
%echo% ID: %self.id%
|
||||||
|
%echo% IS_INROOM: %self.is_inroom%
|
||||||
%echo% NAME: %self.name%
|
%echo% NAME: %self.name%
|
||||||
|
%echo% NEXT_IN_LIST: %self.next_in_list%
|
||||||
|
%echo% ROOM: %self.room%
|
||||||
%echo% SHORTDESC: %self.shortdesc%
|
%echo% SHORTDESC: %self.shortdesc%
|
||||||
%echo% TIMER: %self.timer%
|
%echo% TIMER: %self.timer%
|
||||||
%echo% TYPE: %self.type%
|
%echo% TYPE: %self.type%
|
||||||
|
@ -704,44 +715,39 @@ Object Variables Example~
|
||||||
%echo% VAL2: %self.val2%
|
%echo% VAL2: %self.val2%
|
||||||
%echo% VAL3: %self.val3%
|
%echo% VAL3: %self.val3%
|
||||||
%echo% VNUM: %self.vnum%
|
%echo% VNUM: %self.vnum%
|
||||||
%echo% CARRIED_BY: %self.carried_by%
|
%echo% WEARFLAG: %self.wearflag%
|
||||||
%echo% NEXT_IN_LIST: %self.next_in_list%
|
|
||||||
%echo% WORN_BY: %self.worn_by%
|
|
||||||
%echo% WEIGHT: %self.weight%
|
%echo% WEIGHT: %self.weight%
|
||||||
%echo% COST: %self.cost%
|
%echo% WORN_BY: %self.worn_by%
|
||||||
%echo% COST_PER_DAY: %self.cost_per_day%
|
|
||||||
%echo% CONTENTS: %self.contents%
|
|
||||||
%echo% IS_INROOM: %self.is_inroom%
|
|
||||||
%echo% ROOM: %self.room%
|
|
||||||
%echo% VNUM: %self.room.vnum%
|
|
||||||
%purge% self
|
%purge% self
|
||||||
~
|
~
|
||||||
#29
|
#29
|
||||||
Room Variables Example~
|
Room Variables Example~
|
||||||
2 b 100
|
2 b 100
|
||||||
~
|
~
|
||||||
* By Rumble
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
%echo% ID: %self.id%
|
* A listing and demonstration of all room variables.
|
||||||
%echo% NAME: %self.name%
|
%echo% CONTENTS: %self.contents%
|
||||||
%echo% NORTH: %self.north% %self.north(vnum)%
|
%echo% NORTH: %self.north% %self.north(vnum)%
|
||||||
%echo% SOUTH: %self.south% %self.south(key)%
|
%echo% SOUTH: %self.south% %self.south(key)%
|
||||||
%echo% SOUTH: %self.south% %self.south(vnum)%
|
%echo% SOUTH: %self.south% %self.south(vnum)%
|
||||||
%echo% EAST: %self.east% %self.east(bits)%
|
%echo% EAST: %self.east% %self.east(bits)%
|
||||||
%echo% WEST: %self.west% %self.west(room)%
|
%echo% WEST: %self.west% %self.west(room)%
|
||||||
%echo% UP: %self.up%
|
%echo% UP: %self.up%
|
||||||
%echo% DOWN: %self.down%
|
%echo% DOWN: %self.down%
|
||||||
%echo% VNUM: %self.vnum%
|
%echo% ID: %self.id%
|
||||||
%echo% PEOPLE: %self.people%
|
%echo% NAME: %self.name%
|
||||||
%echo% WEATHER: %self.weather%
|
%echo% PEOPLE: %self.people%
|
||||||
%echo% SECTOR: %self.sector%
|
%echo% RANDOM.DIR: %self.random.dir%
|
||||||
%echo% CONTENTS: %self.contents%
|
%echo% SECTOR: %self.sector%
|
||||||
|
%echo% VNUM: %self.vnum%
|
||||||
|
%echo% WEATHER: %self.weather%
|
||||||
~
|
~
|
||||||
#30
|
#30
|
||||||
Text Variables Example~
|
Text Variables Example~
|
||||||
2 d 100
|
2 d 100
|
||||||
*~
|
*~
|
||||||
* By Rumble
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* The Arguments: * means all speech will fire the trigger.
|
* A listing and demonstration of all text variables.
|
||||||
%echo% SPEECH: %speech%
|
%echo% SPEECH: %speech%
|
||||||
%echo% STRLEN: %speech.strlen%
|
%echo% STRLEN: %speech.strlen%
|
||||||
%echo% TRIM: %speech.trim%
|
%echo% TRIM: %speech.trim%
|
||||||
|
@ -749,38 +755,34 @@ Text Variables Example~
|
||||||
%echo% CDR: %speech.cdr%
|
%echo% CDR: %speech.cdr%
|
||||||
%echo% MUDCOMMAND: %speech.mudcommand%
|
%echo% MUDCOMMAND: %speech.mudcommand%
|
||||||
%echo% CONTAINS: %speech.contains(test)%
|
%echo% CONTAINS: %speech.contains(test)%
|
||||||
|
%echo% CHARAT 3: %speech.charat(3)%
|
||||||
~
|
~
|
||||||
#31
|
#31
|
||||||
Special Variables Example~
|
Special Variables Example~
|
||||||
2 d 100
|
2 d 100
|
||||||
*~
|
*~
|
||||||
* By Rumble
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* A listing and demonstration of all special variables.
|
||||||
%echo% SELF ID: %self.id%
|
%echo% SELF ID: %self.id%
|
||||||
%echo% HOUR: %time.hour%
|
%echo% HOUR: %time.hour%
|
||||||
%echo% DAY: %time.day%
|
%echo% DAY: %time.day%
|
||||||
%echo% MONTH: %time.month%
|
%echo% MONTH: %time.month%
|
||||||
%echo% YEAR: %time.year%
|
%echo% YEAR: %time.year%
|
||||||
%echo% PEOPLE: %people.1233%
|
%echo% PEOPLE: %people.3%
|
||||||
%echo% RANDOM NUM: %random.99%
|
%echo% RANDOM NUM: %random.99%
|
||||||
%echo% RANDOM PC: %random.char%
|
%echo% RANDOM PC: %random.char%
|
||||||
%echo% SPEECH: %speech%
|
%echo% SPEECH: %speech%
|
||||||
%echo% FINDOBJ: There are %findobj.1233(1300)% objects of vnum 1300 in room 1233.
|
%echo% FINDOBJ: There are %findobj.3(33)% objects of vnum 33 in room 3.
|
||||||
%echo% There is %findobj.1233(1346356)% object of ID 1346356 in room 1233.
|
%echo% There are %findobj.3(guide)% objects of name guide in room 3.
|
||||||
%echo% There are %findobj.1233(app)% objects of name app in room 1233.
|
%echo% FINDMOB: There are %findmob.3(33)% mobs of vnum 33 in room 3.
|
||||||
%echo% There are %findobj.1233(apprehension)% objects of name apprehension in room 1233.
|
|
||||||
%echo% FINDMOB: There are %findmob.1233(1300)% mobs of vnum 1300 in room 1233.
|
|
||||||
%echo% There is %findmob.1233(64741)% mobs of ID 64741 in room 1233.
|
|
||||||
* not working
|
|
||||||
%echo% There are %findmob.1233(fried)% mobs of name fried in room 1233.
|
|
||||||
%echo% There are %findmob.1233(friedrich)% mobs of name friedrich in room 1233.
|
|
||||||
%echo% There are %findmob.self(fried)% mobs of name fried in room 1233.
|
|
||||||
%echo% There are %findmob.self(friedrich)% mobs of name friedrich in room 1233.
|
|
||||||
~
|
~
|
||||||
#32
|
#32
|
||||||
Mob Checks Player Inventory~
|
Mob Checks Player Inventory~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* By Jamie Nelson modified by Rumble* Checks if the actor is wielding the item
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* This trigger has been replaced by the has_item variable. But this is still a
|
||||||
|
* good example. if %actor.has_item(1300)% does the same thing.
|
||||||
if %actor.eq(wield)%
|
if %actor.eq(wield)%
|
||||||
eval wep %actor.eq(wield)%
|
eval wep %actor.eq(wield)%
|
||||||
if %wep.vnum%==1300
|
if %wep.vnum%==1300
|
||||||
|
@ -967,44 +969,41 @@ say %msg%
|
||||||
Switch Example~
|
Switch Example~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* By Falstar
|
* By Falstar of The Builder Academy tbamud.com 9091
|
||||||
switch %random.6%
|
* Pick a random number 1-7, 7 is actually for the default case.
|
||||||
case 0
|
switch %random.7%
|
||||||
|
case 1
|
||||||
set book 'Creative cooking with human flesh'
|
set book 'Creative cooking with human flesh'
|
||||||
break
|
break
|
||||||
case 1
|
case 2
|
||||||
set book 'Re-animating the Dead for Dummies'
|
set book 'Re-animating the Dead for Dummies'
|
||||||
break
|
break
|
||||||
case 2
|
case 3
|
||||||
set book 'How to teach your henchman to rob graves in 7 days'
|
set book 'How to teach your henchman to rob graves in 7 days'
|
||||||
break
|
break
|
||||||
case 3
|
case 4
|
||||||
set book 'An A-Z guide of Mage-induced maladies and mutations'
|
set book 'An A-Z guide of Mage-induced maladies and mutations'
|
||||||
break
|
break
|
||||||
case 4
|
case 5
|
||||||
set book '101 Easy ways to rescue a damsel in distress'
|
set book '101 Easy ways to rescue a damsel in distress'
|
||||||
break
|
break
|
||||||
case 5
|
case 6
|
||||||
set book 'Witch Hazel's Bumper Book of rare herbs and potions'
|
set book 'Witch Hazel's Bumper Book of rare herbs and potions'
|
||||||
break
|
break
|
||||||
case 6
|
|
||||||
set book 'Arcane Artifacts made easy'
|
|
||||||
break
|
|
||||||
default
|
default
|
||||||
* this should be here, even if it's never reached
|
set book 'Arcane Artifacts made easy'
|
||||||
set book default reached
|
done
|
||||||
done
|
*
|
||||||
*
|
wait 1 s
|
||||||
wait 1 s
|
%echo% Dr. Von Erhartz seems engrossed in reading a large leatherbound book through a battered pair
|
||||||
%echo% Dr. Von Erhartz seems engrossed in reading a large leatherbound book through a battered pair
|
%echo% of reading glasses. The title reads: %book%.
|
||||||
%echo% of reading glasses. The title reads: %book%.
|
%echo% The doctor looks up at you, seeming to notice you for the first time.
|
||||||
%echo% The doctor looks up at you, seeming to notice you for the first time.
|
wait 1 s
|
||||||
wait 1 s
|
say ah %actor.name%, I was wondering when you'd drop by.
|
||||||
say ah %actor.name%, I was wondering when you'd drop by.
|
|
||||||
~
|
~
|
||||||
#35
|
#35
|
||||||
Mob Room Wander Switch~
|
Mob Room Specific Speeches~
|
||||||
0 b 100
|
0 b 5
|
||||||
~
|
~
|
||||||
* By Rumble
|
* By Rumble
|
||||||
* So we don't get problems if more than one is loaded.
|
* So we don't get problems if more than one is loaded.
|
||||||
|
@ -1065,7 +1064,7 @@ done
|
||||||
Time Example~
|
Time Example~
|
||||||
0 b 1
|
0 b 1
|
||||||
~
|
~
|
||||||
* By Rumble w/help from Jamie Nelson on http://groups.yahoo.com/group/dg_scripts/
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A replica of the "time" command.
|
* A replica of the "time" command.
|
||||||
* Convert hour from 24 hour to 12 hour clock with am/pm
|
* Convert hour from 24 hour to 12 hour clock with am/pm
|
||||||
if %time.hour% > 12
|
if %time.hour% > 12
|
||||||
|
@ -1188,28 +1187,44 @@ eval months %%m%time.month%%%
|
||||||
%echo% The %time.day%%suf% Day of the %months%, Year %time.year%.
|
%echo% The %time.day%%suf% Day of the %months%, Year %time.year%.
|
||||||
~
|
~
|
||||||
#37
|
#37
|
||||||
Emote Copycat~
|
Obj Command quarter flip example~
|
||||||
0 c 100
|
1 c 2
|
||||||
e~
|
flip~
|
||||||
if %cmd.mudcommand% == emote && %arg%
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
wait 2 sec
|
* Numeric Arg: 2 means in character's carried inventory
|
||||||
emote %arg%
|
* does not work for level 32 and above.
|
||||||
|
if coin /= %arg% || quarter /= %arg%
|
||||||
|
%echoaround% %actor% %actor.name% flips a coin high up into the air.
|
||||||
|
%send% %actor% You flip the coin up into the air.
|
||||||
|
switch %random.2%
|
||||||
|
case 1
|
||||||
|
%echo% The coin falls to the ground, bounces, rolls, and ends up showing heads!
|
||||||
|
break
|
||||||
|
case 2
|
||||||
|
%echo% The coin falls to the ground, bounces, rolls, and ends up showing tails!
|
||||||
|
break
|
||||||
|
default
|
||||||
|
%echo% The coin falls on its edge and balances perfectly.
|
||||||
|
break
|
||||||
|
done
|
||||||
|
else
|
||||||
|
%send% %actor% flip What?
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#38
|
#38
|
||||||
Mob Receive and Assemble Example~
|
Mob Receive and Assemble Example~
|
||||||
0 j 100
|
0 j 100
|
||||||
~
|
~
|
||||||
* Example by Aeon
|
* By Aeon of The Builder Academy tbamud.com 9091
|
||||||
wait 2 sec
|
* Check mob's inventory (this does not include equipped items).
|
||||||
* Check mob's inventory (this does not include equipped items)
|
|
||||||
if %self.inventory(16701)% && %self.inventory(16702)% && %self.inventory(16703)% && %self.inventory(16704)% && %self.inventory(16705)%
|
if %self.inventory(16701)% && %self.inventory(16702)% && %self.inventory(16703)% && %self.inventory(16704)% && %self.inventory(16705)%
|
||||||
* Removing items from the mob
|
* Removing items from the mob.
|
||||||
%purge% flour
|
%purge% %self.inventory(16701)%
|
||||||
%purge% salt
|
%purge% %self.inventory(16702)%
|
||||||
%purge% sugar
|
%purge% %self.inventory(16703)%
|
||||||
%purge% soda
|
%purge% %self.inventory(16704)%
|
||||||
%purge% egg
|
%purge% %self.inventory(16705)%
|
||||||
|
wait 2 sec
|
||||||
* For roleplay sake
|
* For roleplay sake
|
||||||
say Thank you %actor.name%! Now here is the cake.
|
say Thank you %actor.name%! Now here is the cake.
|
||||||
* Give the reward
|
* Give the reward
|
||||||
|
@ -1222,7 +1237,8 @@ end
|
||||||
Mob Following Assist Master~
|
Mob Following Assist Master~
|
||||||
0 b 100
|
0 b 100
|
||||||
~
|
~
|
||||||
* By Rumble
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* Make following mob assist.
|
||||||
if %self.master%
|
if %self.master%
|
||||||
eval master %self.master%
|
eval master %self.master%
|
||||||
if %master.fighting%
|
if %master.fighting%
|
||||||
|
@ -1233,33 +1249,65 @@ if %self.master%
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#40
|
#40
|
||||||
mfollow Example~
|
Random Equipment Scatter and Teleport~
|
||||||
0 b 100
|
2 g 100
|
||||||
~
|
~
|
||||||
* By Welcor
|
* By Random of The Builder Academy tbamud.com 9091
|
||||||
set actor %random.char%
|
* Scatter the player and all of their equipment randomly across the zone.
|
||||||
mfollow %actor%
|
wait 1 sec
|
||||||
say I follow you now %actor.name%
|
%send% %actor% You feel you must not have been worthy when a powerful force hurls you back through the gates.
|
||||||
say self.master: %self.master%
|
wait 2 sec
|
||||||
say actor: %actor%
|
eval stunned %actor.hitp% -1
|
||||||
eval follower %self.master%
|
%damage% %actor% %stunned%
|
||||||
say follower: %follower%
|
eval num %random.99% + 20300
|
||||||
say follower.name : %follower.name%
|
%teleport% %actor% %num%
|
||||||
|
while %actor.inventory%
|
||||||
|
eval item %actor.inventory%
|
||||||
|
if %item.type% == CONTAINER
|
||||||
|
while %item.contents%
|
||||||
|
eval stolen %item.contents.vnum%
|
||||||
|
%echo% purging %item.contents.shortdesc% in container.
|
||||||
|
%purge% %item.contents%
|
||||||
|
eval num %random.99% + 2300
|
||||||
|
%at% %num% %load% obj %stolen%
|
||||||
|
done
|
||||||
|
end
|
||||||
|
eval item_to_purge %actor.inventory%
|
||||||
|
eval stolen %item.vnum%
|
||||||
|
%purge% %item_to_purge%
|
||||||
|
eval num %random.99% + 2300
|
||||||
|
%at% %num% %load% obj %stolen%
|
||||||
|
done
|
||||||
|
eval i 0
|
||||||
|
while %i% < 18
|
||||||
|
eval item %%actor.eq(%i%)%%
|
||||||
|
if %item%
|
||||||
|
eval stolen %item.vnum%
|
||||||
|
eval item_to_purge %%actor.eq(%i%)%%
|
||||||
|
%send% %actor% You drop %item.shortdesc%
|
||||||
|
%purge% %item_to_purge%
|
||||||
|
eval num %random.99% + 20300
|
||||||
|
%at% %num% %load% obj %stolen%
|
||||||
|
end
|
||||||
|
eval i %i%+1
|
||||||
|
done
|
||||||
|
%force% %actor% look
|
||||||
~
|
~
|
||||||
#41
|
#41
|
||||||
Hunt Example~
|
Memory and Mhunt Example~
|
||||||
0 o 100
|
0 o 100
|
||||||
~
|
~
|
||||||
* Mob must first have a memory trig, attach 74.
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* Fires if player is in mobs memory via mremember and the mob sees the actor.
|
||||||
%echo% Sleeping for 10 secs, give %actor.name% a head start.
|
%echo% Sleeping for 10 secs, give %actor.name% a head start.
|
||||||
sleep
|
sleep
|
||||||
%echo% Targetting %actor.name%
|
%echo% Targetting %actor.name%
|
||||||
wait 10 s
|
wait 10 s
|
||||||
wake
|
wake
|
||||||
stand
|
stand
|
||||||
north
|
%random.dir%
|
||||||
north
|
%random.dir%
|
||||||
up
|
%random.dir%
|
||||||
%echo% Hunting...%actor.name%
|
%echo% Hunting...%actor.name%
|
||||||
mhunt %actor%
|
mhunt %actor%
|
||||||
~
|
~
|
||||||
|
@ -1380,15 +1428,13 @@ done
|
||||||
Rumble's Shotgun~
|
Rumble's Shotgun~
|
||||||
1 b 100
|
1 b 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* If the object is being wielded.
|
* If the object is being wielded.
|
||||||
if %self.worn_by%
|
if %self.worn_by%
|
||||||
* This is a random trigger so actor has to be defined.
|
* This is a random trigger so actor has to be defined.
|
||||||
eval actor %self.worn_by%
|
eval actor %self.worn_by%
|
||||||
* If the person wielding the object is fighting.
|
* If the person wielding the object is fighting.
|
||||||
if %actor.fighting%
|
if %actor.fighting%
|
||||||
* Evaluate uniquely to this player.
|
|
||||||
context %actor.id%
|
|
||||||
* Count the shots.
|
* Count the shots.
|
||||||
eval shotgun_rounds %shotgun_rounds% + 1
|
eval shotgun_rounds %shotgun_rounds% + 1
|
||||||
* Remember the count for the next time this trig fires.
|
* Remember the count for the next time this trig fires.
|
||||||
|
@ -1500,7 +1546,7 @@ end
|
||||||
Eval and Set Example~
|
Eval and Set Example~
|
||||||
2 d 100
|
2 d 100
|
||||||
test~
|
test~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* This is a speech trig @RHELP TRIGEDIT ROOM SPEECH@n, say 'test' to activate.
|
* This is a speech trig @RHELP TRIGEDIT ROOM SPEECH@n, say 'test' to activate.
|
||||||
* There is much confusion about the difference between set and eval. So this is
|
* There is much confusion about the difference between set and eval. So this is
|
||||||
* the simplest way I can think of to explain it (assume %actor.level% = 34):
|
* the simplest way I can think of to explain it (assume %actor.level% = 34):
|
||||||
|
@ -1818,7 +1864,7 @@ Mob Entry Example~
|
||||||
* first find the room the mob is in and put the value in %inroom%
|
* first find the room the mob is in and put the value in %inroom%
|
||||||
eval inroom %self.room%
|
eval inroom %self.room%
|
||||||
* then check on the rooms vnum
|
* then check on the rooms vnum
|
||||||
if %inroom.vnum% == 1233
|
if %inroom.vnum% == 33
|
||||||
say I, %self.name%, declare this room Rumble's.
|
say I, %self.name%, declare this room Rumble's.
|
||||||
end
|
end
|
||||||
eval person %inroom.people%
|
eval person %inroom.people%
|
||||||
|
@ -1923,7 +1969,8 @@ done
|
||||||
Mob Memory Example Part 1~
|
Mob Memory Example Part 1~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* This must be set by another trigger first before the mem trigger can be used.
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* mremember must be used before you can use the trigger type memory.
|
||||||
mremember %actor.name%
|
mremember %actor.name%
|
||||||
say I'll remember you now, %actor.name%
|
say I'll remember you now, %actor.name%
|
||||||
~
|
~
|
||||||
|
@ -1931,6 +1978,8 @@ say I'll remember you now, %actor.name%
|
||||||
Mob Memory Example Part 2~
|
Mob Memory Example Part 2~
|
||||||
0 o 100
|
0 o 100
|
||||||
~
|
~
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* Fires if player is in mobs memory via mremember and the mob sees the actor.
|
||||||
wait 4 s
|
wait 4 s
|
||||||
poke %actor.name%
|
poke %actor.name%
|
||||||
say i've seen you before, %actor.name%.
|
say i've seen you before, %actor.name%.
|
||||||
|
|
|
@ -443,7 +443,7 @@ end
|
||||||
Mob Act - 156 speaker greet~
|
Mob Act - 156 speaker greet~
|
||||||
0 e 0
|
0 e 0
|
||||||
has entered the game.~
|
has entered the game.~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Num Arg 0 means the argument has to match exactly. So trig will only fire off:
|
* Num Arg 0 means the argument has to match exactly. So trig will only fire off:
|
||||||
* "has entered game." and not "has" or "entered" etc. (that would be num arg 1).
|
* "has entered game." and not "has" or "entered" etc. (that would be num arg 1).
|
||||||
* Figure out what vnum the mob is in so we can use zoneecho.
|
* Figure out what vnum the mob is in so we can use zoneecho.
|
||||||
|
@ -602,7 +602,7 @@ end
|
||||||
Thief Guildguard - 177~
|
Thief Guildguard - 177~
|
||||||
0 q 100
|
0 q 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* This replaces stock guildguard spcial procedure that stops non-class members.
|
* This replaces stock guildguard spcial procedure that stops non-class members.
|
||||||
if %direction% == up
|
if %direction% == up
|
||||||
* Let the guildmaster pass to pawn players items. T137.
|
* Let the guildmaster pass to pawn players items. T137.
|
||||||
|
@ -624,7 +624,7 @@ end
|
||||||
Thief Guildmaster Steals - M122~
|
Thief Guildmaster Steals - M122~
|
||||||
0 b 100
|
0 b 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Idea taken from cheesymud.com
|
* Idea taken from cheesymud.com
|
||||||
* Thief guildmaster steals from players who idle in his guild. Then pawns the
|
* Thief guildmaster steals from players who idle in his guild. Then pawns the
|
||||||
* item in the shop downstairs so player has to buy their equipment back :-P
|
* item in the shop downstairs so player has to buy their equipment back :-P
|
||||||
|
@ -665,74 +665,111 @@ end
|
||||||
Questmaster Greet - 3~
|
Questmaster Greet - 3~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy builderacademy.net 9091
|
||||||
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
||||||
* Simple quests, probably too simple so only let players earn 50 qp's doing this.
|
* A simple automated quest so only let players earn up to 50 questpoints.
|
||||||
if %actor.is_pc% && %actor.questpoints% < 50
|
if %actor.is_pc% && %actor.questpoints% < 50
|
||||||
wait 2 sec
|
wait 2 sec
|
||||||
* Check to see if they are not on a zone 1 quest.
|
* Check to see if they are not on a zone 1 quest.
|
||||||
if !%actor.varexists(on_quest_zone_1)%
|
if !%actor.varexists(on_quest_zone_1)%
|
||||||
say Welcome %actor.name%, are you interested in a simple quest?
|
say Welcome %actor.name%, are you interested in a simple quest?
|
||||||
else
|
else
|
||||||
say How is your quest going %actor.name%, do you have a quest token or the quest mobs head for me?
|
*get the values from the player variable
|
||||||
end
|
extract day 1 %actor.on_quest_zone_1%
|
||||||
|
extract hour 2 %actor.on_quest_zone_1%
|
||||||
|
* Set this value to the number of mud hours in a mud day
|
||||||
|
set HOURS_IN_DAY 24
|
||||||
|
* Compare the values to the current time
|
||||||
|
* (Your hours per day and days per year vary on each mud.)
|
||||||
|
* (You may also want to check for 'time.year')
|
||||||
|
eval current_ticks (%time.day%/%HOURS_IN_DAY%)+%time.hour%
|
||||||
|
eval start_ticks (%day%/%HOURS_IN_DAY%)+%hour%
|
||||||
|
*find out the time difference in ticks
|
||||||
|
eval ticks_passed %current_ticks%-%start_ticks%
|
||||||
|
*check if 10 ticks (~10 mins) have passed
|
||||||
|
if %ticks_passed% > 10
|
||||||
|
rdelete on_quest_zone_1 %actor.id%
|
||||||
|
say Welcome %actor.name%, are you interested in a simple quest?
|
||||||
|
else
|
||||||
|
say How is your quest going %actor.name%, do you have a quest token or the quest mobs head for me?
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#139
|
#139
|
||||||
Questmaster Quest Assignment - 3~
|
Questmaster Quest Assignment - 3~
|
||||||
0 d 1
|
0 d 1
|
||||||
*~
|
*~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy builderacademy.net 9091
|
||||||
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
||||||
* Don't let them do more than one quest at a time or earn more than 50 qp.
|
if %actor.varexists(on_quest_zone_1)%
|
||||||
if %actor.varexists(on_quest_zone_1)% || %actor.questpoints% > 50
|
*get the values from the player variable
|
||||||
halt
|
extract day 1 %actor.on_quest_zone_1%
|
||||||
end
|
extract hour 2 %actor.on_quest_zone_1%
|
||||||
|
* Set this value to the number of mud hours in a mud day
|
||||||
|
set HOURS_IN_DAY 24
|
||||||
|
* Compare the values to the current time
|
||||||
|
* (Your hours per day and days per year vary on each mud.)
|
||||||
|
* (You may also want to check for 'time.year')
|
||||||
|
eval current_ticks (%time.day%/%HOURS_IN_DAY%)+%time.hour%
|
||||||
|
eval start_ticks (%day%/%HOURS_IN_DAY%)+%hour%
|
||||||
|
*find out the time difference in ticks
|
||||||
|
eval ticks_passed %current_ticks%-%start_ticks%
|
||||||
|
*check if 10 ticks (~10 mins) have passed
|
||||||
|
if %ticks_passed% > 10
|
||||||
|
rdelete on_quest_zone_1 %actor.id%
|
||||||
|
else
|
||||||
|
halt
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if %actor.questpoints% > 50
|
||||||
|
halt
|
||||||
|
end
|
||||||
* This loop goes through the entire string of words the actor says. .car is the
|
* This loop goes through the entire string of words the actor says. .car is the
|
||||||
* word and .cdr is the remaining string.
|
* word and .cdr is the remaining string.
|
||||||
eval word %speech.car%
|
eval word %speech.car%
|
||||||
eval rest %speech.cdr%
|
eval rest %speech.cdr%
|
||||||
while %word%
|
while %word%
|
||||||
* Check to see if the word is yes or an abbreviation of yes.
|
* Check to see if the word is yes or an abbreviation of yes.
|
||||||
if yes /= %word%
|
if yes /= %word%
|
||||||
say Very well %actor.name%. Would you like to find an object or hunt a mobile?
|
say Very well %actor.name%. Would you like to find an object or hunt a mobile?
|
||||||
halt
|
halt
|
||||||
end
|
end
|
||||||
* Pick a room from 100 to 365.
|
* Pick a room from 100 to 365.
|
||||||
eval loadroom 99 + %random.265%
|
eval loadroom 99 + %random.265%
|
||||||
if mobile /= %word% || hunt /= %word%
|
if mobile /= %word% || hunt /= %word%
|
||||||
* Load the mob in the random room picked above.
|
* Load the mob in the random room picked above.
|
||||||
%at% %loadroom% %load% m 15
|
%at% %loadroom% %load% m 15
|
||||||
say Go kill the quest mob and bring me its head %actor.name%. You only have 10 minutes!
|
say Go kill the quest mob and bring me its head %actor.name%. You only have 10 minutes!
|
||||||
* Load an object on the player that counts down from 10 minutes.
|
* Load an object on the player that counts down from 10 minutes.
|
||||||
%load% obj 16 %actor% inv
|
%load% obj 16 %actor% inv
|
||||||
%send% %actor% Gives you the quest timer.
|
%send% %actor% %self.name% gives you the quest timer.
|
||||||
%echoaround% %actor% %self.name% gives %actor.name% the quest timer.
|
%echoaround% %actor% %self.name% gives %actor.name% the quest timer.
|
||||||
set on_quest_zone_1 1
|
set on_quest_zone_1 %time.day% %time.hour%
|
||||||
remote on_quest_zone_1 %actor.id%
|
remote on_quest_zone_1 %actor.id%
|
||||||
halt
|
halt
|
||||||
elseif object /= %word% || find /= %word%
|
elseif object /= %word% || find /= %word%
|
||||||
say Go find the quest token and return it to me. You only have 10 minutes %actor.name%!
|
say Go find the quest token and return it to me. You only have 10 minutes %actor.name%!
|
||||||
%load% o 15
|
%load% o 15
|
||||||
%at% %loadroom% drop quest_token_zone_1
|
%at% %loadroom% drop quest_token_zone_1
|
||||||
%load% obj 16 %actor% inv
|
%load% obj 16 %actor% inv
|
||||||
%send% %actor% Gives you the quest timer.
|
%send% %actor% %self.name% gives you the quest timer.
|
||||||
%echoaround% %actor% %self.name% gives %actor.name% the quest timer.
|
%echoaround% %actor% %self.name% gives %actor.name% the quest timer.
|
||||||
set on_quest_zone_1 1
|
set on_quest_zone_1 %time.day% %time.hour%
|
||||||
remote on_quest_zone_1 %actor.id%
|
remote on_quest_zone_1 %actor.id%
|
||||||
halt
|
halt
|
||||||
end
|
end
|
||||||
* End of the loop we need to take the next word in the string and save the
|
* End of the loop we need to take the next word in the string and save the
|
||||||
* remainder for the next pass.
|
* remainder for the next pass.
|
||||||
eval word %rest.car%
|
eval word %rest.car%
|
||||||
eval rest %rest.cdr%
|
eval rest %rest.cdr%
|
||||||
done
|
done
|
||||||
~
|
~
|
||||||
#140
|
#140
|
||||||
Quest Timer - 16~
|
Quest Timer - 16~
|
||||||
1 c 7
|
1 c 7
|
||||||
l~
|
l~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
||||||
* Let a player see how much time they have left.
|
* Let a player see how much time they have left.
|
||||||
if %cmd.mudcommand% == look && timer /= %arg%
|
if %cmd.mudcommand% == look && timer /= %arg%
|
||||||
|
@ -747,7 +784,7 @@ end
|
||||||
Quest 10 min Purge - 15, 16, 17~
|
Quest 10 min Purge - 15, 16, 17~
|
||||||
1 f 100
|
1 f 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
||||||
* Attached to quest objects 15-17. Purges itself 10 minutes after loading if
|
* Attached to quest objects 15-17. Purges itself 10 minutes after loading if
|
||||||
* player does not finish the quest.
|
* player does not finish the quest.
|
||||||
|
@ -767,7 +804,7 @@ end
|
||||||
Quest Timer Random - 16~
|
Quest Timer Random - 16~
|
||||||
1 b 10
|
1 b 10
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
||||||
* If timer is being carried by a player, warn them every 2 minutes.
|
* If timer is being carried by a player, warn them every 2 minutes.
|
||||||
if %self.carried_by%
|
if %self.carried_by%
|
||||||
|
@ -781,7 +818,7 @@ end
|
||||||
Questmaster Receive - 3~
|
Questmaster Receive - 3~
|
||||||
0 j 100
|
0 j 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
||||||
* Check if they are on the quest.
|
* Check if they are on the quest.
|
||||||
if !%actor.varexists(on_quest_zone_1)%
|
if !%actor.varexists(on_quest_zone_1)%
|
||||||
|
@ -791,13 +828,13 @@ if !%actor.varexists(on_quest_zone_1)%
|
||||||
end
|
end
|
||||||
*
|
*
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
* If they have the head or the token.
|
* If they had the head or the token.
|
||||||
if %object.vnum% == 15 || %object.vnum% == 17
|
if %object.vnum% == 15 || %object.vnum% == 17
|
||||||
|
rdelete on_quest_zone_1 %actor.id%
|
||||||
say Well done, %actor.name%.
|
say Well done, %actor.name%.
|
||||||
* Give them 50 gold and experience. Delete the on quest variable and purge.
|
* Give them 50 gold and experience. Delete the on quest variable and purge.
|
||||||
nop %actor.exp(50)%
|
nop %actor.exp(50)%
|
||||||
nop %actor.gold(50)%
|
nop %actor.gold(50)%
|
||||||
rdelete on_quest_zone_1 %actor.id%
|
|
||||||
%purge% %object%
|
%purge% %object%
|
||||||
* Reward them with 1 questpoint. Cheap I know but these quests are not hard.
|
* Reward them with 1 questpoint. Cheap I know but these quests are not hard.
|
||||||
nop %actor.questpoints(1)%
|
nop %actor.questpoints(1)%
|
||||||
|
@ -812,7 +849,7 @@ end
|
||||||
Quest Mob Loads Head - 15~
|
Quest Mob Loads Head - 15~
|
||||||
0 n 100
|
0 n 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
* Part of a timed quest to kill a mob or find an object. Trigs 138-144.
|
||||||
* This is a load instead of a death trig because I want the head to purge 10
|
* This is a load instead of a death trig because I want the head to purge 10
|
||||||
* minutes after loading.
|
* minutes after loading.
|
||||||
|
@ -913,7 +950,7 @@ emote %speech%
|
||||||
Angel Receives Treats - 207~
|
Angel Receives Treats - 207~
|
||||||
0 j 100
|
0 j 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A simple receive trig if you give the dog food she will eat it. If you give
|
* A simple receive trig if you give the dog food she will eat it. If you give
|
||||||
* her dog treats she will follow you. Everything else she drops.
|
* her dog treats she will follow you. Everything else she drops.
|
||||||
if %object.type% == FOOD
|
if %object.type% == FOOD
|
||||||
|
@ -1007,14 +1044,20 @@ end
|
||||||
Check for treats - 207~
|
Check for treats - 207~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* My dog is looking if people have some beggin strips.
|
||||||
if %actor.has_item(164)%
|
if %actor.has_item(164)%
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
emote sits down and stands up on %self.hisher% hind legs, then starts whining pitifully staring at %actor.name%.
|
%send% %actor% %self.name% sits down and stands up on %self.hisher% hind legs, then starts whining pitifully staring at you.
|
||||||
|
%echoaround% %actor% %self.name% sits down and stands up on %self.hisher% hind legs, then starts whining pitifully staring at %actor.name%.
|
||||||
|
* Or if they have her rubber chicken.
|
||||||
elseif %actor.has_item(172)%
|
elseif %actor.has_item(172)%
|
||||||
|
wait 1 sec
|
||||||
emote sniff %actor.name%
|
emote sniff %actor.name%
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
growl %actor.name%
|
growl %actor.name%
|
||||||
emote tries to get at something you are carrying.
|
%send% %actor% %self.name% tries to get at something you are carrying.
|
||||||
|
%echoaround% %actor% %self.name% tries to get at something %actor.name% is carrying.
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#156
|
#156
|
||||||
|
@ -1163,7 +1206,7 @@ end
|
||||||
Cast spells on Greet - M135~
|
Cast spells on Greet - M135~
|
||||||
0 g 10
|
0 g 10
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Cast a random spell on players that enter. But, only if they are not already
|
* Cast a random spell on players that enter. But, only if they are not already
|
||||||
* affected and only 10% of the time.
|
* affected and only 10% of the time.
|
||||||
switch %random.12%
|
switch %random.12%
|
||||||
|
@ -1236,7 +1279,7 @@ done
|
||||||
Mob Questshop Example~
|
Mob Questshop Example~
|
||||||
0 c 100
|
0 c 100
|
||||||
*~
|
*~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A questshop that uses questpoints!
|
* A questshop that uses questpoints!
|
||||||
* Command triggers do not work for level 32 and above.
|
* Command triggers do not work for level 32 and above.
|
||||||
if %cmd.mudcommand% == list
|
if %cmd.mudcommand% == list
|
||||||
|
@ -1878,7 +1921,7 @@ say %speech%
|
||||||
Confucius - 23~
|
Confucius - 23~
|
||||||
0 b 10
|
0 b 10
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Confucius - M23 - T186 By Rumble
|
* Confucius - M23 - T186 By Rumble
|
||||||
eval max %random.27%
|
eval max %random.27%
|
||||||
set txt[1] Before you embark on a journey of revenge, dig two graves.
|
set txt[1] Before you embark on a journey of revenge, dig two graves.
|
||||||
|
@ -2131,7 +2174,10 @@ say The best advice for new builders is under @RHELP SUGGESTIONS@n.
|
||||||
TBA Welcome - 18~
|
TBA Welcome - 18~
|
||||||
0 e 1
|
0 e 1
|
||||||
entered reconnected~
|
entered reconnected~
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* TBA mortal greet to fill out the application.
|
||||||
if %actor.is_pc% && %actor.level% == 1
|
if %actor.is_pc% && %actor.level% == 1
|
||||||
|
context %actor.id%
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
if %actor.varexists(TBA_mortal_greeting)%
|
if %actor.varexists(TBA_mortal_greeting)%
|
||||||
say Welcome back %actor.name%. Tell someone level 32 or above when you complete the application.
|
say Welcome back %actor.name%. Tell someone level 32 or above when you complete the application.
|
||||||
|
@ -2140,7 +2186,9 @@ if %actor.is_pc% && %actor.level% == 1
|
||||||
wait 2 sec
|
wait 2 sec
|
||||||
say If you are interested in learning how to build, or want to teach others, then you have come to the right place.
|
say If you are interested in learning how to build, or want to teach others, then you have come to the right place.
|
||||||
wait 2 sec
|
wait 2 sec
|
||||||
say Please fill out the application at: http://tbamud.com/builderapplication
|
say Please fill out the application at: http://www.geocities.com/buildersacademy
|
||||||
|
nop %actor.thirst(-1)%
|
||||||
|
nop %actor.hunger(-1)%
|
||||||
set TBA_mortal_greeting 1
|
set TBA_mortal_greeting 1
|
||||||
remote TBA_mortal_greeting %actor.id%
|
remote TBA_mortal_greeting %actor.id%
|
||||||
if !%actor.has_item(1332)%
|
if !%actor.has_item(1332)%
|
||||||
|
|
|
@ -48,20 +48,29 @@ CAPITAL~
|
||||||
%send% %actor% @RSocrates tells you, 'Good job, that is correct. Be on the lookout for more of those.'@n
|
%send% %actor% @RSocrates tells you, 'Good job, that is correct. Be on the lookout for more of those.'@n
|
||||||
~
|
~
|
||||||
#1304
|
#1304
|
||||||
free~
|
Sanct check on enter~
|
||||||
0 g 100
|
2 g 100
|
||||||
~
|
~
|
||||||
wait 1 sec
|
if %actor.affect(SANCT)%
|
||||||
say some more good advice may be found under @RHELP GRAMMAR@n and @RHELP REPORT@n.
|
%echo% checked sanct
|
||||||
|
else
|
||||||
|
%echo% sanct check failed
|
||||||
|
end
|
||||||
~
|
~
|
||||||
#1305
|
#1305
|
||||||
TBA Greeting - 1301~
|
TBA Greeting - 1301~
|
||||||
0 e 1
|
0 e 1
|
||||||
arrives entered appears~
|
arrives entered appears~
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* TBA start room greeting for anyone that enters, poofs, or is transferred.
|
||||||
|
* Simple remote to remember if this is a newbie or someone returning.
|
||||||
|
* Only fire on players.
|
||||||
if %actor.is_pc%
|
if %actor.is_pc%
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
|
* If they have already been greeted welcome them back.
|
||||||
if %actor.varexists(TBA_greeting)%
|
if %actor.varexists(TBA_greeting)%
|
||||||
say Welcome back %actor.name%. Read through these rooms whenever you need a refresher.
|
say Welcome back %actor.name%. Read through these rooms whenever you need a refresher.
|
||||||
|
* First greeting, give them instructions.
|
||||||
else
|
else
|
||||||
say Welcome to The Builder Academy %actor.name%.
|
say Welcome to The Builder Academy %actor.name%.
|
||||||
wait 1 sec
|
wait 1 sec
|
||||||
|
@ -70,8 +79,11 @@ if %actor.is_pc%
|
||||||
say This zone is like a newbie zone, except for gods. All you have to do is walk through the zone and read every room description.
|
say This zone is like a newbie zone, except for gods. All you have to do is walk through the zone and read every room description.
|
||||||
wait 3 sec
|
wait 3 sec
|
||||||
say Be sure to do everything the room descriptions tell you to do. You should read and comprehend everything contained within these walls.
|
say Be sure to do everything the room descriptions tell you to do. You should read and comprehend everything contained within these walls.
|
||||||
|
* Now create a variable to remember they have been greeted.
|
||||||
set TBA_greeting 1
|
set TBA_greeting 1
|
||||||
|
* Save it to the player file.
|
||||||
remote TBA_greeting %actor.id%
|
remote TBA_greeting %actor.id%
|
||||||
|
* Give them a trial vnum assigner if they don't have one yet.
|
||||||
if !%actor.has_item(1332)%
|
if !%actor.has_item(1332)%
|
||||||
%load% obj 1332 %actor% inv
|
%load% obj 1332 %actor% inv
|
||||||
end
|
end
|
||||||
|
@ -1486,7 +1498,7 @@ free~
|
||||||
Drop While Example - Grenade 01301~
|
Drop While Example - Grenade 01301~
|
||||||
1 h 100
|
1 h 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A small script to make a grenade go off 3 seconds after it is dropped.
|
* A small script to make a grenade go off 3 seconds after it is dropped.
|
||||||
* Set the rooms ID to a variable.
|
* Set the rooms ID to a variable.
|
||||||
set room_var %actor.room%
|
set room_var %actor.room%
|
||||||
|
@ -1727,35 +1739,10 @@ while (%person%)
|
||||||
done
|
done
|
||||||
~
|
~
|
||||||
#1361
|
#1361
|
||||||
Postal Shotgun - 1392~
|
Free~
|
||||||
1 b 100
|
1 b 100
|
||||||
~
|
~
|
||||||
* if the object is being wielded
|
* No Script
|
||||||
if %self.worn_by%
|
|
||||||
* a random trigger so actor has to be defined
|
|
||||||
eval actor %self.worn_by%
|
|
||||||
* if the person wielding the object is fighting
|
|
||||||
if %actor.fighting%
|
|
||||||
* evaluate uniquely to this player
|
|
||||||
context %actor.id%
|
|
||||||
* count the shots
|
|
||||||
eval shotgun_rounds %shotgun_rounds% + 1
|
|
||||||
* remember the count for the next time this trig fires
|
|
||||||
global shotgun_rounds
|
|
||||||
* double barrel shotgun, only has 2 rounds
|
|
||||||
if %shotgun_rounds% > 2
|
|
||||||
* detaching trig since gun is out of ammo.
|
|
||||||
detach 1361 %self.id%
|
|
||||||
halt
|
|
||||||
end
|
|
||||||
* have to define the victim
|
|
||||||
eval victim %actor.fighting%
|
|
||||||
* send the message and do the damage
|
|
||||||
%echoaround% %actor% %actor.name% points %self.shortdesc% at %victim.name% and pulls the trigger.
|
|
||||||
%send% %actor% You point %self.shortdesc% at %victim.name% and pull the trigger.
|
|
||||||
%damage% %victim% 10
|
|
||||||
end
|
|
||||||
end
|
|
||||||
~
|
~
|
||||||
#1362
|
#1362
|
||||||
Deodorant Bottle - 1391~
|
Deodorant Bottle - 1391~
|
||||||
|
@ -2182,60 +2169,63 @@ if (%cmd.mudcommand% == bash || %cmd.mudcommand% == backstab || %cmd.mudcommand%
|
||||||
Rumble's Poofs~
|
Rumble's Poofs~
|
||||||
0 e 0
|
0 e 0
|
||||||
has entered the game.~
|
has entered the game.~
|
||||||
* does not work for level 32 and above.
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
eval maxpoofin %random.24% -1
|
* To generate random poofs at login just set your loadroom to wherever this
|
||||||
set poofins[0] appears with a strange wooshing sound and climbs out of a pneumatic air tube like they use at the bank.
|
* mob is. Does not work for level 32 and above.
|
||||||
set poofins[1] thinks himself into existence.
|
eval maxpoofin %random.24%
|
||||||
set poofins[2] soars into the room like a bird, and THWAP! right into a window.
|
set poofins[1] appears with a strange wooshing sound and climbs out of a pneumatic air
|
||||||
set poofins[3] crawls out of the ground gasping for air.
|
tube like they use at the bank.
|
||||||
set poofins[4] appears in a flash of blinding nothingness!
|
set poofins[2] thinks himself into existence.
|
||||||
set poofins[5] falls from the sky above, screaming until he hits the ground. SPLAT! like a bug on a windshield.
|
set poofins[3] soars into the room like a bird, and THWAP! right into a window.
|
||||||
set poofins[6] appears with a dulcet bang.
|
set poofins[4] crawls out of the ground gasping for air.
|
||||||
set poofins[7] appears with a sonic boom.
|
set poofins[5] appears in a flash of blinding nothingness!
|
||||||
set poofins[8] wanders into the room while practicing omphaloskepsis.
|
set poofins[6] falls from the sky above, screaming until he hits the ground. SPLAT! like a
|
||||||
set poofins[9] somersaults into the room.
|
bug on a windshield.
|
||||||
set poofins[10] stumbles into the room, tripping over his own feet and falling flat on his face.
|
set poofins[7] appears with a dulcet bang.
|
||||||
set poofins[11] dives into the room doing a two and a half tuck gainer, right into the dirt.
|
set poofins[8] appears with a sonic boom.
|
||||||
set poofins[12] runs into the room screaming and looking over his shoulder.
|
set poofins[9] wanders into the room while practicing omphaloskepsis.
|
||||||
set poofins[13] steps out of your shadow.
|
set poofins[10] somersaults into the room.
|
||||||
set poofins[14] forms out of the very essence of your shadow to hang in the air before you.
|
set poofins[11] stumbles into the room, tripping over his own feet and falling flat on his face.
|
||||||
set poofins[15] climbs out of your left nostril.
|
set poofins[12] dives into the room doing a two and a half tuck gainer, right into the dirt.
|
||||||
set poofins[16] has abandoned his search for truth and is now looking for a good fantasy.
|
set poofins[13] runs into the room screaming and looking over his shoulder.
|
||||||
set poofins[17] wishes he was a donut specialist.
|
set poofins[14] steps out of your shadow.
|
||||||
set poofins[18] can resist everything but temptation.
|
set poofins[15] forms out of the very essence of your shadow to hang in the air before you.
|
||||||
set poofins[19] is searching for a near life experience.
|
set poofins[16] climbs out of your left nostril.
|
||||||
set poofins[20] walks into the room fashionably early.
|
set poofins[17] has abandoned his search for truth and is now looking for a good fantasy.
|
||||||
set poofins[21] hanglides into the room.
|
set poofins[18] wishes he was a donut specialist.
|
||||||
set poofins[22] parachutes into the room performing a perfect parachute landing fall, except for the fact that he landed backside first.
|
set poofins[19] can resist everything but temptation.
|
||||||
set poofins[23] does a cannonball into room, injuring himself on the hard ground.
|
set poofins[20] is searching for a near life experience.
|
||||||
set poofin %%poofins[%maxpoofin%]%%
|
set poofins[21] walks into the room fashionably early.
|
||||||
eval poofin %poofin%
|
set poofins[22] hanglides into the room.
|
||||||
%force% %actor% poofin %poofin%
|
set poofins[23] parachutes into the room performing a perfect parachute landing fall,
|
||||||
|
except for the fact that he landed backside first.
|
||||||
|
set poofins[24] does a cannonball into room, injuring himself on the hard ground.
|
||||||
|
eval poofin %%poofins[%maxpoofin%]%%
|
||||||
|
%force% %actor% set self poofin %poofin%
|
||||||
*
|
*
|
||||||
eval maxpoofout %random.20% -1
|
eval maxpoofout %random.20%
|
||||||
set poofouts[0] is chased out of the room by a barrel of rabid monkeys.
|
set poofouts[1] is chased out of the room by a barrel of rabid monkeys.
|
||||||
set poofouts[1] creates a pneumatic air tube, like they use at the banks, and steps in. He is sucked out of sight.
|
set poofouts[2] creates a pneumatic air tube, like they use at the banks, and steps in. He is sucked out of sight.
|
||||||
set poofouts[2] thinks himself out of existence.
|
set poofouts[3] thinks himself out of existence.
|
||||||
set poofouts[3] walks out saying 'time to make the donuts.'
|
set poofouts[4] walks out saying 'time to make the donuts.'
|
||||||
set poofouts[4] goes super critical and has a meltdown. Nothing remains but a pile of steaming radioactive mush.
|
set poofouts[5] goes super critical and has a meltdown. Nothing remains but a pile of steaming radioactive mush.
|
||||||
set poofouts[5] disappears in a flash of blinding nothingness!
|
set poofouts[6] disappears in a flash of blinding nothingness!
|
||||||
set poofouts[6] merges with his surroundings and vanishes.
|
set poofouts[7] merges with his surroundings and vanishes.
|
||||||
set poofouts[7] morphs into millions of ants, which run off in all directions.
|
set poofouts[8] morphs into millions of ants, which run off in all directions.
|
||||||
set poofouts[8] senses that everything is well, so he floats away.
|
set poofouts[9] senses that everything is well, so he floats away.
|
||||||
set poofouts[9] goes to hell in a handbasket.
|
set poofouts[10] goes to hell in a handbasket.
|
||||||
set poofouts[10] does somersaults out of the room.
|
set poofouts[11] does somersaults out of the room.
|
||||||
set poofouts[11] dives out of the room doing three rotations in the jackknife position.
|
set poofouts[12] dives out of the room doing three rotations in the jackknife position.
|
||||||
set poofouts[12] stumbles out of the room with a look of confusion on his face, must have forgotten where he parked.
|
set poofouts[13] stumbles out of the room with a look of confusion on his face, must have forgotten where he parked.
|
||||||
set poofouts[13] steps into your shadow and disappears.
|
set poofouts[14] steps into your shadow and disappears.
|
||||||
set poofouts[14] points behind you with a look of horror. While you turn away he disappears chuckling 'made you look'.
|
set poofouts[15] points behind you with a look of horror. While you turn away he disappears chuckling 'made you look'.
|
||||||
set poofouts[15] doesn't like saying goodbye, so he didn't.
|
set poofouts[16] doesn't like saying goodbye, so he didn't.
|
||||||
set poofouts[16] completes an intricate spell of chantings and gestures that creates an inter-dimensional portal of space and time. Before he steps through it and disappears you notice a 'made in china' sticker on its bottom.
|
set poofouts[17] completes an intricate spell of chantings and gestures that creates an inter-dimensional portal of space and time. Before he steps through it and disappears you notice a 'made in china' sticker on its bottom.
|
||||||
set poofouts[17] creates a huge rubber band, straps himself into the middle of it and stretches it back like a slingshot. With a wave he releases it and is hurtled out of sight.
|
set poofouts[18] creates a huge rubber band, straps himself into the middle of it and stretches it back like a slingshot. With a wave he releases it and is hurtled out of sight.
|
||||||
set poofouts[18] straps an ACME rocket to his back and asks, 'got a light?' right before it explodes and sends him soaring.
|
set poofouts[19] straps an ACME rocket to his back and asks, 'got a light?' right before it explodes and sends him soaring.
|
||||||
set poofouts[19] puts on a helmet and climbs into the barrel of an ACME cannon. It explodes sending pieces of Rumble off into the distance.
|
set poofouts[20] puts on a helmet and climbs into the barrel of an ACME cannon. It explodes sending pieces of Rumble off into the distance.
|
||||||
set poofout %%poofouts[%maxpoofout%]%%
|
eval poofout %%poofouts[%maxpoofout%]%%
|
||||||
eval poofout %poofout%
|
%force% %actor% set self poofout %poofout%
|
||||||
%force% %actor% poofout %poofout%
|
|
||||||
~
|
~
|
||||||
#1373
|
#1373
|
||||||
Present Unwrapping~
|
Present Unwrapping~
|
||||||
|
@ -2962,7 +2952,7 @@ say 24
|
||||||
Random Rabbit Decapitates Mobs - M1307~
|
Random Rabbit Decapitates Mobs - M1307~
|
||||||
0 b 100
|
0 b 100
|
||||||
none~
|
none~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* This is for any Monty Python Fans.
|
* This is for any Monty Python Fans.
|
||||||
* First figure out what room you are in.
|
* First figure out what room you are in.
|
||||||
eval room_var %self.room%
|
eval room_var %self.room%
|
||||||
|
|
|
@ -122,6 +122,63 @@ else
|
||||||
end
|
end
|
||||||
%echoaround% %actor% %actor.name% peers into %actor.hisher% gently glowing ring.
|
%echoaround% %actor% %actor.name% peers into %actor.hisher% gently glowing ring.
|
||||||
~
|
~
|
||||||
|
#206
|
||||||
|
Smelly Bum - M168~
|
||||||
|
0 i 100
|
||||||
|
~
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* A trig to let people smell the bum from 1 room away.
|
||||||
|
* For the first move there is no from_room so set it.
|
||||||
|
if !%from_room%
|
||||||
|
eval from_room %self.room.vnum%
|
||||||
|
global from_room
|
||||||
|
halt
|
||||||
|
end
|
||||||
|
wait 1 sec
|
||||||
|
eval inroom %self.room%
|
||||||
|
*
|
||||||
|
%at% %from_room% %echo% %self.name%'s smell slowly dissipates with %self.himher%.
|
||||||
|
if %inroom.north% && %inroom.north(vnum)% != %from_room%
|
||||||
|
%at% %inroom.north(vnum)% %echo% You notice a nasty smell to the south.
|
||||||
|
end
|
||||||
|
if %inroom.south% && %inroom.south(vnum)% != %from_room%
|
||||||
|
%at% %inroom.south(vnum)% %echo% You notice a nasty smell to the north.
|
||||||
|
end
|
||||||
|
if %inroom.east% && %inroom.east(vnum)% != %from_room%
|
||||||
|
%at% %inroom.east(vnum)% %echo% You notice a nasty smell to the west.
|
||||||
|
end
|
||||||
|
if %inroom.west% && %inroom.west(vnum)% != %from_room%
|
||||||
|
%at% %inroom.west(vnum)% %echo% You notice a nasty smell to the east.
|
||||||
|
end
|
||||||
|
if %inroom.up% && %inroom.up(vnum)% != %from_room%
|
||||||
|
%at% %inroom.up(vnum)% %echo% You notice a nasty smell below you.
|
||||||
|
end
|
||||||
|
if %inroom.down% && %inroom.down(vnum)% != %from_room%
|
||||||
|
%at% %inroom.down(vnum)% %echo% You notice a nasty smell above you.
|
||||||
|
end
|
||||||
|
*
|
||||||
|
eval from_room %self.room.vnum%
|
||||||
|
global from_room
|
||||||
|
~
|
||||||
|
#207
|
||||||
|
Mob Blocks opening of chest~
|
||||||
|
0 c 100
|
||||||
|
o~
|
||||||
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
|
* does not work for level 32 and above.
|
||||||
|
* Make sure the command is open, check for any abbrev of chest
|
||||||
|
if %cmd.mudcommand% == open && chest /= %arg%
|
||||||
|
* findmob checks if the mob is in the room.
|
||||||
|
if %findmob.230(189)%
|
||||||
|
%echoaround% %actor% As %actor.name% tries to approach the chest %self.name% looks up.
|
||||||
|
wait 1 sec
|
||||||
|
say get away from there.
|
||||||
|
end
|
||||||
|
else
|
||||||
|
* If it doesn't match let the command continue.
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
~
|
||||||
#212
|
#212
|
||||||
Phoenix Rising - 219~
|
Phoenix Rising - 219~
|
||||||
1 c 4
|
1 c 4
|
||||||
|
|
|
@ -419,7 +419,7 @@ mkill %bad_guy%
|
||||||
Lieutenant Door Bribe - M23608~
|
Lieutenant Door Bribe - M23608~
|
||||||
0 m 1
|
0 m 1
|
||||||
~
|
~
|
||||||
* By Welcor of The Builder Academy builderacademy.net 9091
|
* By Welcor of The Builder Academy tbamud.com 9091
|
||||||
wait 1
|
wait 1
|
||||||
* The price is 400 coins to pass. Player must 'give 400 coin leader.'
|
* The price is 400 coins to pass. Player must 'give 400 coin leader.'
|
||||||
if %amount% < 400
|
if %amount% < 400
|
||||||
|
@ -440,7 +440,7 @@ end
|
||||||
Lieutenant Door Bribe 2 - M23608~
|
Lieutenant Door Bribe 2 - M23608~
|
||||||
0 r 100
|
0 r 100
|
||||||
~
|
~
|
||||||
* By Welcor of The Builder Academy builderacademy.net 9091
|
* By Welcor of The Builder Academy tbamud.com 9091
|
||||||
* Allows more than one instance of this trigger to run.
|
* Allows more than one instance of this trigger to run.
|
||||||
context %actor.id%
|
context %actor.id%
|
||||||
* Checks a global variable to see if this mob has been bribed. TSTAT 23612.
|
* Checks a global variable to see if this mob has been bribed. TSTAT 23612.
|
||||||
|
@ -466,7 +466,7 @@ end
|
||||||
Lieutenant Leave - 23608~
|
Lieutenant Leave - 23608~
|
||||||
0 q 100
|
0 q 100
|
||||||
~
|
~
|
||||||
* By Welcor of The Builder Academy builderacademy.net 9091
|
* By Welcor of The Builder Academy tbamud.com 9091
|
||||||
* If the player is trying to leave to the East.
|
* If the player is trying to leave to the East.
|
||||||
if %direction% == east
|
if %direction% == east
|
||||||
context %actor.id%
|
context %actor.id%
|
||||||
|
@ -483,20 +483,16 @@ if %direction% == east
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#23615
|
#23615
|
||||||
Check for Dwarf - 23610~
|
FREE~
|
||||||
2 c 100
|
2 q 100
|
||||||
e~
|
~
|
||||||
if %cmd.mudcommand% == east
|
if %direction% == east
|
||||||
if %actor.race%==dwarf
|
return 0
|
||||||
%send% %actor% The door vanishes as if it was never there, and you step through.
|
%send% %actor% The door vanishes as if it was never there, and you step through.
|
||||||
%echoaround% %actor% As %actor.name% steps through the doorway, the door disappears for an instant.
|
%echoaround% %actor% As %actor.name% steps through the doorway, the door disappears for an instant.
|
||||||
%teleport% %actor% 23611
|
%teleport% %actor% 23611
|
||||||
%echoaround% %actor% %actor.name% has arrived.
|
%echoaround% %actor% %actor.name% has arrived.
|
||||||
%force% %actor% look
|
%force% %actor% look
|
||||||
return 1
|
|
||||||
else
|
|
||||||
return 0
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#23616
|
#23616
|
||||||
|
|
|
@ -399,7 +399,7 @@ done
|
||||||
Slipping on Marbles - 27147~
|
Slipping on Marbles - 27147~
|
||||||
1 q 100
|
1 q 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* A leave trigger that checks for low dexterity.
|
* A leave trigger that checks for low dexterity.
|
||||||
if %actor.is_pc%
|
if %actor.is_pc%
|
||||||
if %actor.dex% < 15
|
if %actor.dex% < 15
|
||||||
|
|
|
@ -203,10 +203,14 @@ quit~
|
||||||
%send% %actor% Powerful forces keep you here.
|
%send% %actor% Powerful forces keep you here.
|
||||||
~
|
~
|
||||||
#315
|
#315
|
||||||
Room Command - No Recall~
|
Obj Command - No quit~
|
||||||
2 c 100
|
1 c 3
|
||||||
recall ~
|
q~
|
||||||
%send% %actor% Divine forces prevent you from doing that.
|
if %cmd.mudcommand% == quit
|
||||||
|
%send% %actor% Divine forces prevent you from doing that.
|
||||||
|
else
|
||||||
|
return 0
|
||||||
|
end
|
||||||
~
|
~
|
||||||
#316
|
#316
|
||||||
Mob Fight - generic poison~
|
Mob Fight - generic poison~
|
||||||
|
|
|
@ -1,234 +1,240 @@
|
||||||
#3000
|
#3000
|
||||||
Mage Guildguard - 3024~
|
Mage Guildguard - 3024~
|
||||||
0 q 100
|
0 q 100
|
||||||
~
|
~
|
||||||
* Check the direction the player must go to enter the guild.
|
* Check the direction the player must go to enter the guild.
|
||||||
if %direction% == south
|
if %direction% == south
|
||||||
* Stop them if they are not the appropriate class.
|
* Stop them if they are not the appropriate class.
|
||||||
if %actor.class% != Magic User
|
if %actor.class% != Magic User
|
||||||
return 0
|
return 0
|
||||||
%send% %actor% The guard humiliates you, and blocks your way.
|
%send% %actor% The guard humiliates you, and blocks your way.
|
||||||
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#3001
|
#3001
|
||||||
Cleric Guildguard - 3025~
|
Cleric Guildguard - 3025~
|
||||||
0 q 100
|
0 q 100
|
||||||
~
|
~
|
||||||
* Check the direction the player must go to enter the guild.
|
* Check the direction the player must go to enter the guild.
|
||||||
if %direction% == north
|
if %direction% == north
|
||||||
* Stop them if they are not the appropriate class.
|
* Stop them if they are not the appropriate class.
|
||||||
if %actor.class% != Cleric
|
if %actor.class% != Cleric
|
||||||
return 0
|
return 0
|
||||||
%send% %actor% The guard humiliates you, and blocks your way.
|
%send% %actor% The guard humiliates you, and blocks your way.
|
||||||
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#3002
|
#3002
|
||||||
Thief Guildguard - 3026~
|
Thief Guildguard - 3026~
|
||||||
0 q 100
|
0 q 100
|
||||||
~
|
~
|
||||||
* Check the direction the player must go to enter the guild.
|
* Check the direction the player must go to enter the guild.
|
||||||
if %direction% == east
|
if %direction% == east
|
||||||
* Stop them if they are not the appropriate class.
|
* Stop them if they are not the appropriate class.
|
||||||
if %actor.class% != Thief
|
if %actor.class% != Thief
|
||||||
return 0
|
return 0
|
||||||
%send% %actor% The guard humiliates you, and blocks your way.
|
%send% %actor% The guard humiliates you, and blocks your way.
|
||||||
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#3003
|
#3003
|
||||||
Warrior Guildguard - 3027~
|
Warrior Guildguard - 3027~
|
||||||
0 q 100
|
0 q 100
|
||||||
~
|
~
|
||||||
* Check the direction the player must go to enter the guild.
|
* Check the direction the player must go to enter the guild.
|
||||||
if %direction% == east
|
if %direction% == east
|
||||||
* Stop them if they are not the appropriate class.
|
* Stop them if they are not the appropriate class.
|
||||||
if %actor.class% != Warrior
|
if %actor.class% != Warrior
|
||||||
return 0
|
return 0
|
||||||
%send% %actor% The guard humiliates you, and blocks your way.
|
%send% %actor% The guard humiliates you, and blocks your way.
|
||||||
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
%echoaround% %actor% The guard humiliates %actor.name%, and blocks %actor.hisher% way.
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#3004
|
#3004
|
||||||
Dump - 3030~
|
Dump - 3030~
|
||||||
2 h 100
|
2 h 100
|
||||||
~
|
~
|
||||||
%echo% %object.shortdesc% vanishes in a puff of smoke!
|
%echo% %object.shortdesc% vanishes in a puff of smoke!
|
||||||
%send% %actor% You are awarded for outstanding performance.
|
%send% %actor% You are awarded for outstanding performance.
|
||||||
%echoaround% %actor% %actor.name% has been awarded for being a good citizen.
|
%echoaround% %actor% %actor.name% has been awarded for being a good citizen.
|
||||||
eval value %object.cost% / 10
|
eval value %object.cost% / 10
|
||||||
%purge% %object%
|
%purge% %object%
|
||||||
if %value% > 50
|
if %value% > 50
|
||||||
eval value 50
|
eval value 50
|
||||||
elseif %value% < 1
|
elseif %value% < 1
|
||||||
eval value 1
|
eval value 1
|
||||||
end
|
end
|
||||||
if %actor.level% < 3
|
if %actor.level% < 3
|
||||||
nop %actor.exp(%value%)%
|
nop %actor.exp(%value%)%
|
||||||
else
|
else
|
||||||
nop %actor.gold(%value%)%
|
nop %actor.gold(%value%)%
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#3005
|
#3005
|
||||||
Stock Thief~
|
Stock Thief~
|
||||||
0 b 10
|
0 b 10
|
||||||
~
|
~
|
||||||
set actor %random.char%
|
set actor %random.char%
|
||||||
if %actor%
|
if %actor%
|
||||||
if %actor.is_pc% && %actor.gold%
|
if %actor.is_pc% && %actor.gold%
|
||||||
%send% %actor% You discover that %self.name% has %self.hisher% hands in your wallet.
|
%send% %actor% You discover that %self.name% has %self.hisher% hands in your wallet.
|
||||||
%echoaround% %actor% %self.name% tries to steal gold from %actor.name%.
|
%echoaround% %actor% %self.name% tries to steal gold from %actor.name%.
|
||||||
eval coins %actor.gold% * %random.10% / 100
|
eval coins %actor.gold% * %random.10% / 100
|
||||||
nop %actor.gold(-%coins%)
|
nop %actor.gold(-%coins%)
|
||||||
nop %self.gold(%coins%)
|
nop %self.gold(%coins%)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#3006
|
#3006
|
||||||
Stock Snake~
|
Stock Snake~
|
||||||
0 k 10
|
0 k 10
|
||||||
~
|
~
|
||||||
%send% %actor% %self.name% bites you!
|
%send% %actor% %self.name% bites you!
|
||||||
%echoaround% %actor% %self.name% bites %actor.name%.
|
%echoaround% %actor% %self.name% bites %actor.name%.
|
||||||
dg_cast 'poison' %actor%
|
dg_cast 'poison' %actor%
|
||||||
~
|
~
|
||||||
#3007
|
#3007
|
||||||
Stock Magic User~
|
Stock Magic User~
|
||||||
0 k 10
|
0 k 10
|
||||||
~
|
~
|
||||||
switch %actor.level%
|
switch %actor.level%
|
||||||
case 1
|
case 1
|
||||||
case 2
|
case 2
|
||||||
case 3
|
case 3
|
||||||
break
|
break
|
||||||
case 4
|
case 4
|
||||||
dg_cast 'magic missile' %actor%
|
dg_cast 'magic missile' %actor%
|
||||||
break
|
break
|
||||||
case 5
|
case 5
|
||||||
dg_cast 'chill touch' %actor%
|
dg_cast 'chill touch' %actor%
|
||||||
break
|
break
|
||||||
case 6
|
case 6
|
||||||
dg_cast 'burning hands' %actor%
|
dg_cast 'burning hands' %actor%
|
||||||
break
|
break
|
||||||
case 7
|
case 7
|
||||||
case 8
|
case 8
|
||||||
dg_cast 'shocking grasp' %actor%
|
dg_cast 'shocking grasp' %actor%
|
||||||
break
|
break
|
||||||
case 9
|
case 9
|
||||||
case 10
|
case 10
|
||||||
case 11
|
case 11
|
||||||
dg_cast 'lightning bolt' %actor%
|
dg_cast 'lightning bolt' %actor%
|
||||||
break
|
break
|
||||||
case 12
|
case 12
|
||||||
dg_cast 'color spray' %actor%
|
dg_cast 'color spray' %actor%
|
||||||
break
|
break
|
||||||
case 13
|
case 13
|
||||||
dg_cast 'energy drain' %actor%
|
dg_cast 'energy drain' %actor%
|
||||||
break
|
break
|
||||||
case 14
|
case 14
|
||||||
dg_cast 'curse' %actor%
|
dg_cast 'curse' %actor%
|
||||||
break
|
break
|
||||||
case 15
|
case 15
|
||||||
dg_cast 'poison' %actor%
|
dg_cast 'poison' %actor%
|
||||||
break
|
break
|
||||||
case 16
|
case 16
|
||||||
if %actor.align% > 0
|
if %actor.align% > 0
|
||||||
dg_cast 'dispel good' %actor%
|
dg_cast 'dispel good' %actor%
|
||||||
else
|
else
|
||||||
dg_cast 'dispel evil' %actor%
|
dg_cast 'dispel evil' %actor%
|
||||||
end
|
end
|
||||||
break
|
break
|
||||||
case 17
|
case 17
|
||||||
case 18
|
case 18
|
||||||
dg_cast 'call lightning' %actor%
|
dg_cast 'call lightning' %actor%
|
||||||
break
|
break
|
||||||
case 19
|
case 19
|
||||||
case 20
|
case 20
|
||||||
case 21
|
case 21
|
||||||
case 22
|
case 22
|
||||||
dg_cast 'harm' %actor%
|
dg_cast 'harm' %actor%
|
||||||
break
|
break
|
||||||
default
|
default
|
||||||
dg_cast 'fireball' %actor%
|
dg_cast 'fireball' %actor%
|
||||||
break
|
break
|
||||||
done
|
done
|
||||||
~
|
~
|
||||||
#3008
|
#3008
|
||||||
Death Trap~
|
Death Trap~
|
||||||
2 g 100
|
2 g 100
|
||||||
~
|
~
|
||||||
* Near Death Trap stuns actor
|
* Near Death Trap stuns actor
|
||||||
eval stunned %actor.hitp%
|
eval stunned %actor.hitp%
|
||||||
%damage% %actor% %stunned%
|
%damage% %actor% %stunned%
|
||||||
%send% %actor% You are on the brink of life and death.
|
%send% %actor% You are on the brink of life and death.
|
||||||
%send% %actor% The Gods must favor you this day.
|
%send% %actor% The Gods must favor you this day.
|
||||||
~
|
~
|
||||||
#3009
|
#3009
|
||||||
Stock Cityguard - 3059, 60, 67~
|
Stock Cityguard - 3059, 60, 67~
|
||||||
0 b 50
|
0 b 50
|
||||||
~
|
~
|
||||||
if !%self.fighting%
|
if !%self.fighting%
|
||||||
set actor %random.char%
|
set actor %random.char%
|
||||||
if %actor%
|
if %actor%
|
||||||
if %actor.is_killer%
|
if %actor.is_killer%
|
||||||
emote screams 'HEY!!! You're one of those PLAYER KILLERS!!!!!!'
|
emote screams 'HEY!!! You're one of those PLAYER KILLERS!!!!!!'
|
||||||
kill %actor.name%
|
kill %actor.name%
|
||||||
elseif %actor.is_thief%
|
elseif %actor.is_thief%
|
||||||
emote screams 'HEY!!! You're one of those PLAYER THIEVES!!!!!!'
|
emote screams 'HEY!!! You're one of those PLAYER THIEVES!!!!!!'
|
||||||
kill %actor.name%
|
kill %actor.name%
|
||||||
elseif %actor.cha% < 6
|
elseif %actor.cha% < 6
|
||||||
%send% %actor% %self.name% spits in your face.
|
%send% %actor% %self.name% spits in your face.
|
||||||
%echoaround% %actor% %self.name% spits in %actor.name%'s face.
|
%echoaround% %actor% %self.name% spits in %actor.name%'s face.
|
||||||
end
|
end
|
||||||
if %actor.fighting%
|
if %actor.fighting%
|
||||||
eval victim %actor.fighting%
|
eval victim %actor.fighting%
|
||||||
if %actor.align% < %victim.align% && %victim.align% >= 0
|
if %actor.align% < %victim.align% && %victim.align% >= 0
|
||||||
emote screams 'PROTECT THE INNOCENT! BANZAI! CHARGE! ARARARAGGGHH!'
|
emote screams 'PROTECT THE INNOCENT! BANZAI! CHARGE! ARARARAGGGHH!'
|
||||||
kill %actor.name%
|
kill %actor.name%
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
~
|
~
|
||||||
#3010
|
#3010
|
||||||
Stock Fido - 3062, 3066~
|
Stock Fido - 3062, 3066~
|
||||||
0 b 100
|
0 b 100
|
||||||
~
|
~
|
||||||
eval inroom %self.room%
|
eval inroom %self.room%
|
||||||
eval item %inroom.contents%
|
eval item %inroom.contents%
|
||||||
while %item%
|
while %item%
|
||||||
* Target the next item in room. In case it is devoured.
|
* Target the next item in room. In case it is devoured.
|
||||||
set next_item %item.next_in_list%
|
set next_item %item.next_in_list%
|
||||||
* Check for a corpse. Corpse on TBA is vnum 65535. Stock is -1.
|
* Check for a corpse. Corpse on TBA is vnum 65535. Stock is -1.
|
||||||
if %item.vnum% == 65535
|
if %item.vnum% == 65535
|
||||||
emote savagely devours a corpse.
|
emote savagely devours a corpse.
|
||||||
%purge% %item%
|
%purge% %item%
|
||||||
end
|
end
|
||||||
set item %next_item%
|
set item %next_item%
|
||||||
* Loop back
|
* Loop back
|
||||||
done
|
done
|
||||||
~
|
~
|
||||||
#3011
|
#3011
|
||||||
Stock Janitor - 3061, 3068~
|
Stock Janitor - 3061, 3068~
|
||||||
0 b 100
|
0 b 100
|
||||||
~
|
~
|
||||||
eval inroom %self.room%
|
eval inroom %self.room%
|
||||||
eval item %inroom.contents%
|
eval item %inroom.contents%
|
||||||
while %item%
|
while %item%
|
||||||
* Target the next item in room. In case it is picked up.
|
* Target the next item in room. In case it is picked up.
|
||||||
set next_item %item.next_in_list%
|
set next_item %item.next_in_list%
|
||||||
* TODO: if %item.wearflag(take)%
|
* TODO: if %item.wearflag(take)%
|
||||||
* Check for fountains and expensive items.
|
* Check for fountains and expensive items.
|
||||||
if %item.type% != FOUNTAIN && %item.cost% <= 15
|
if %item.type% != FOUNTAIN && %item.cost% <= 15
|
||||||
take %item.name%
|
take %item.name%
|
||||||
end
|
end
|
||||||
set item %next_item%
|
set item %next_item%
|
||||||
* Loop back
|
* Loop back
|
||||||
done
|
done
|
||||||
~
|
~
|
||||||
$~
|
#3012
|
||||||
|
Newbie Tour Guide~
|
||||||
|
0 e 0
|
||||||
|
has entered the game.~
|
||||||
|
%echo% This trigger commandlist is not complete!
|
||||||
|
~
|
||||||
|
$~
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
Near Death Trap Mahatma - 6318~
|
Near Death Trap Mahatma - 6318~
|
||||||
0 g 100
|
0 g 100
|
||||||
~
|
~
|
||||||
* By Rumble of The Builder Academy builderacademy.net 9091
|
* By Rumble of The Builder Academy tbamud.com 9091
|
||||||
* Near Death Trap - Mahatma stuns actor and then takes all of their equipment.
|
* Near Death Trap - Mahatma stuns actor and then takes all of their equipment.
|
||||||
wait 3 sec
|
wait 3 sec
|
||||||
say Here, have a quick trip to the Temple of Midgaard.
|
say Here, have a quick trip to the Temple of Midgaard.
|
||||||
|
|
|
@ -356,7 +356,7 @@ with this zone, and the help of others, you can do this.
|
||||||
@RHELP LOCATION@n
|
@RHELP LOCATION@n
|
||||||
@RHELP THEME@n
|
@RHELP THEME@n
|
||||||
@RHELP PLOT@n
|
@RHELP PLOT@n
|
||||||
@RHELP SIZE@n
|
@RHELP ZONE-SIZE@n
|
||||||
@RHELP ALIGNMENT@n
|
@RHELP ALIGNMENT@n
|
||||||
@RHELP BIAS@n
|
@RHELP BIAS@n
|
||||||
~
|
~
|
||||||
|
@ -667,7 +667,6 @@ from you. It's a beautiful reciprocal arrangement.
|
||||||
--The Catcher in the Rye
|
--The Catcher in the Rye
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
T 1217
|
|
||||||
#34
|
#34
|
||||||
Pool of Images~
|
Pool of Images~
|
||||||
A broad mosaic walkway wraps around the natural hotsprings in this cavernous
|
A broad mosaic walkway wraps around the natural hotsprings in this cavernous
|
||||||
|
|
|
@ -318,10 +318,6 @@ that have become common names throughout the realm. It is said that completing
|
||||||
a quest is a prerequisite towards immortality.
|
a quest is a prerequisite towards immortality.
|
||||||
~
|
~
|
||||||
1 8 0 0 0 0
|
1 8 0 0 0 0
|
||||||
D1
|
|
||||||
~
|
|
||||||
~
|
|
||||||
0 0 -1
|
|
||||||
D2
|
D2
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
|
@ -1078,10 +1074,6 @@ more than just drinks as large shelves are filled with various items and
|
||||||
equipment.
|
equipment.
|
||||||
~
|
~
|
||||||
1 8 0 0 0 0
|
1 8 0 0 0 0
|
||||||
D1
|
|
||||||
~
|
|
||||||
~
|
|
||||||
0 0 -1
|
|
||||||
D2
|
D2
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
|
@ -1662,7 +1654,7 @@ S
|
||||||
The Thieves Warehouse~
|
The Thieves Warehouse~
|
||||||
A pathway has been opened here to allow for small carts and wagons to pass.
|
A pathway has been opened here to allow for small carts and wagons to pass.
|
||||||
You can hear a few workers in the distance pushing the large crates over the
|
You can hear a few workers in the distance pushing the large crates over the
|
||||||
dusty floor. A large box and tackle swings back and forth on a strangel pulley
|
dusty floor. A large box and tackle swings back and forth on a strange pulley
|
||||||
system above you.
|
system above you.
|
||||||
~
|
~
|
||||||
1 8 0 0 0 0
|
1 8 0 0 0 0
|
||||||
|
|
|
@ -1210,10 +1210,6 @@ of life. The darkness engulfs the northern exit while the life fills the
|
||||||
surrounding area.
|
surrounding area.
|
||||||
~
|
~
|
||||||
104 0 0 0 0 0
|
104 0 0 0 0 0
|
||||||
D0
|
|
||||||
~
|
|
||||||
~
|
|
||||||
0 0 20901
|
|
||||||
D2
|
D2
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
|
@ -1228,10 +1224,6 @@ papers with writing on them scatter this desk as well. The ceiling above is
|
||||||
nothing but a thick looking glass with bars filling in for support.
|
nothing but a thick looking glass with bars filling in for support.
|
||||||
~
|
~
|
||||||
104 8196 0 0 0 0
|
104 8196 0 0 0 0
|
||||||
D0
|
|
||||||
~
|
|
||||||
~
|
|
||||||
0 0 -1
|
|
||||||
D2
|
D2
|
||||||
~
|
~
|
||||||
~
|
~
|
||||||
|
@ -1253,10 +1245,6 @@ A large squishy looking armchair sits in the middle of the room only a few feet
|
||||||
from the fireplace. @n
|
from the fireplace. @n
|
||||||
~
|
~
|
||||||
104 24 0 0 0 0
|
104 24 0 0 0 0
|
||||||
D0
|
|
||||||
~
|
|
||||||
~
|
|
||||||
0 0 -1
|
|
||||||
E
|
E
|
||||||
main chamber room taylors tays~
|
main chamber room taylors tays~
|
||||||
@WA small lamp sits in the center of the room letting off a small amount of
|
@WA small lamp sits in the center of the room letting off a small amount of
|
||||||
|
|
|
@ -116,6 +116,17 @@ didn't notice that exit before isn't it?
|
||||||
~
|
~
|
||||||
0 -1 1204
|
0 -1 1204
|
||||||
S
|
S
|
||||||
|
#1233
|
||||||
|
An unfinished room~
|
||||||
|
You are in an unfinished room.
|
||||||
|
~
|
||||||
|
12 0 0 0 0 0
|
||||||
|
D0
|
||||||
|
ueotn
|
||||||
|
~
|
||||||
|
~
|
||||||
|
0 0 0
|
||||||
|
S
|
||||||
#1290
|
#1290
|
||||||
The Immortal Board Hall~
|
The Immortal Board Hall~
|
||||||
You are standing in a large hall, exits lead off to the board rooms of the
|
You are standing in a large hall, exits lead off to the board rooms of the
|
||||||
|
|
|
@ -38,11 +38,6 @@ D2
|
||||||
~
|
~
|
||||||
0 0 23700
|
0 0 23700
|
||||||
E
|
E
|
||||||
masonry~
|
|
||||||
The stones have been set so close, you can't even force a knife between them.
|
|
||||||
|
|
||||||
~
|
|
||||||
E
|
|
||||||
sign~
|
sign~
|
||||||
+----------------------------------+
|
+----------------------------------+
|
||||||
| |
|
| |
|
||||||
|
@ -68,6 +63,11 @@ sign~
|
||||||
| |
|
| |
|
||||||
| |
|
| |
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
masonry~
|
||||||
|
The stones have been set so close, you can't even force a knife between them.
|
||||||
|
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#23602
|
#23602
|
||||||
Inside the Tradehalls~
|
Inside the Tradehalls~
|
||||||
|
@ -231,7 +231,6 @@ The trade halls are here.
|
||||||
gate wooden~
|
gate wooden~
|
||||||
1 0 23609
|
1 0 23609
|
||||||
S
|
S
|
||||||
T 23615
|
|
||||||
#23611
|
#23611
|
||||||
Passing by the workshops~
|
Passing by the workshops~
|
||||||
You are stand,ing just inside the entrance to the dwarven city, and you are
|
You are stand,ing just inside the entrance to the dwarven city, and you are
|
||||||
|
@ -276,6 +275,12 @@ D0
|
||||||
~
|
~
|
||||||
0 0 23611
|
0 0 23611
|
||||||
E
|
E
|
||||||
|
rods metal~
|
||||||
|
Long rods of differently alloyed metal hang here. On the floor next to them,
|
||||||
|
bars of lead have been lain down. Also a barrel sits here, full to the edge
|
||||||
|
with leather strips for handles.
|
||||||
|
~
|
||||||
|
E
|
||||||
forge contraption strange~
|
forge contraption strange~
|
||||||
A forge with large leather bellows has been set in the full length of the
|
A forge with large leather bellows has been set in the full length of the
|
||||||
eastern wall. A small stream in the corner makes a small milling wheel turn,
|
eastern wall. A small stream in the corner makes a small milling wheel turn,
|
||||||
|
@ -284,12 +289,6 @@ putting the forge here is that small stream. It runs from a hole in the cave
|
||||||
wall about three feet up, into a hole in the corner. A small basin suggests the
|
wall about three feet up, into a hole in the corner. A small basin suggests the
|
||||||
stream is used to temper the steel in, too.
|
stream is used to temper the steel in, too.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
rods metal~
|
|
||||||
Long rods of differently alloyed metal hang here. On the floor next to them,
|
|
||||||
bars of lead have been lain down. Also a barrel sits here, full to the edge
|
|
||||||
with leather strips for handles.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#23613
|
#23613
|
||||||
Before the city~
|
Before the city~
|
||||||
|
@ -359,15 +358,15 @@ D3
|
||||||
~
|
~
|
||||||
0 0 23611
|
0 0 23611
|
||||||
E
|
E
|
||||||
crate~
|
|
||||||
A wooden crate about one by two feet. It contains strips of leather used for
|
|
||||||
the armours made here.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
forge~
|
forge~
|
||||||
The forge has been set in sotnes and is extremely hot. On the other side of
|
The forge has been set in sotnes and is extremely hot. On the other side of
|
||||||
the fire, you notice the weaponsmiths' smithy.
|
the fire, you notice the weaponsmiths' smithy.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
crate~
|
||||||
|
A wooden crate about one by two feet. It contains strips of leather used for
|
||||||
|
the armours made here.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#23616
|
#23616
|
||||||
At the stonewrights.~
|
At the stonewrights.~
|
||||||
|
@ -382,6 +381,13 @@ D3
|
||||||
~
|
~
|
||||||
0 0 23613
|
0 0 23613
|
||||||
E
|
E
|
||||||
|
shelf~
|
||||||
|
A wide shelf has been made from the stone wall. And you notice it has been
|
||||||
|
made by removing the surrounding rock piece by piece. A labour with no end, it
|
||||||
|
seems. On it a couple of small gemstones have been laid, along with a
|
||||||
|
handwritten sign: HANDS OFF!
|
||||||
|
~
|
||||||
|
E
|
||||||
tombstones stones headstones~
|
tombstones stones headstones~
|
||||||
They all look about the same:
|
They all look about the same:
|
||||||
_____________ ___ _______
|
_____________ ___ _______
|
||||||
|
@ -394,13 +400,6 @@ _____________ ___ _______
|
||||||
| | | | | |
|
| | | | | |
|
||||||
|___________| |_| |___|
|
|___________| |_| |___|
|
||||||
~
|
~
|
||||||
E
|
|
||||||
shelf~
|
|
||||||
A wide shelf has been made from the stone wall. And you notice it has been
|
|
||||||
made by removing the surrounding rock piece by piece. A labour with no end, it
|
|
||||||
seems. On it a couple of small gemstones have been laid, along with a
|
|
||||||
handwritten sign: HANDS OFF!
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#23617
|
#23617
|
||||||
The dwarven city~
|
The dwarven city~
|
||||||
|
@ -550,10 +549,9 @@ The ladder stretches into darkness.
|
||||||
~
|
~
|
||||||
0 0 23670
|
0 0 23670
|
||||||
E
|
E
|
||||||
walls~
|
basket~
|
||||||
The walls are the same rock as the surrounding city. You notice, however,
|
A large basket, it looks sturdy enough to carry a ton of rock at once. It
|
||||||
that these walls doesn't consist of blocks of stone. The room's more likely
|
should be able to carry you with all your belongings without any problems.
|
||||||
been dug out of the mountain.
|
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
crane large~
|
crane large~
|
||||||
|
@ -562,9 +560,10 @@ and stone from the mine. You think you might be able to fit in the basket
|
||||||
currently hanging here.
|
currently hanging here.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
basket~
|
walls~
|
||||||
A large basket, it looks sturdy enough to carry a ton of rock at once. It
|
The walls are the same rock as the surrounding city. You notice, however,
|
||||||
should be able to carry you with all your belongings without any problems.
|
that these walls doesn't consist of blocks of stone. The room's more likely
|
||||||
|
been dug out of the mountain.
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
T 23606
|
T 23606
|
||||||
|
@ -1530,18 +1529,18 @@ A portal leads back to the royal court.
|
||||||
portal~
|
portal~
|
||||||
0 0 23663
|
0 0 23663
|
||||||
E
|
E
|
||||||
|
altar marble fire~
|
||||||
|
Tha altar is about 3' tall, 6' wide and 2' deep. It's just out of reach on
|
||||||
|
the other side of the silver chain, and on it, an extremely beautiful hammer has
|
||||||
|
been put.
|
||||||
|
~
|
||||||
|
E
|
||||||
chain silver~
|
chain silver~
|
||||||
A thin silver chain seems to enter the rock on both sides of the altar.
|
A thin silver chain seems to enter the rock on both sides of the altar.
|
||||||
There are no hooks or rings, the chain simply continues into the rock. A strong
|
There are no hooks or rings, the chain simply continues into the rock. A strong
|
||||||
magical field protects the chain, and no matter how you try, you can't seem to
|
magical field protects the chain, and no matter how you try, you can't seem to
|
||||||
cross it.
|
cross it.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
altar marble fire~
|
|
||||||
Tha altar is about 3' tall, 6' wide and 2' deep. It's just out of reach on
|
|
||||||
the other side of the silver chain, and on it, an extremely beautiful hammer has
|
|
||||||
been put.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#23667
|
#23667
|
||||||
At the Dwarven Court~
|
At the Dwarven Court~
|
||||||
|
@ -1559,14 +1558,14 @@ The court continues.
|
||||||
~
|
~
|
||||||
0 0 23663
|
0 0 23663
|
||||||
E
|
E
|
||||||
tapestries~
|
|
||||||
You wonder, could there be anything behind these heavy tapestries?
|
|
||||||
~
|
|
||||||
E
|
|
||||||
throne chair seat dwarven~
|
throne chair seat dwarven~
|
||||||
The Throne has been cut of black marble, and decorated with jade. In the
|
The Throne has been cut of black marble, and decorated with jade. In the
|
||||||
seat the king seem almost divine.
|
seat the king seem almost divine.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
tapestries~
|
||||||
|
You wonder, could there be anything behind these heavy tapestries?
|
||||||
|
~
|
||||||
S
|
S
|
||||||
T 23603
|
T 23603
|
||||||
T 23602
|
T 23602
|
||||||
|
|
|
@ -197,6 +197,11 @@ You see the exit to the entrance hall.
|
||||||
~
|
~
|
||||||
0 -1 3006
|
0 -1 3006
|
||||||
E
|
E
|
||||||
|
writing carving carvings symbols symbol~
|
||||||
|
Although it is very hard to understand, you think it looks a lot like beer,
|
||||||
|
poems about beer, and small beer-mugs.
|
||||||
|
~
|
||||||
|
E
|
||||||
sign~
|
sign~
|
||||||
The sign reads:
|
The sign reads:
|
||||||
Free instructions provided by the Grunting Boar Inn.
|
Free instructions provided by the Grunting Boar Inn.
|
||||||
|
@ -205,11 +210,6 @@ Free instructions provided by the Grunting Boar Inn.
|
||||||
List - The bartender will show you all the different drinks and
|
List - The bartender will show you all the different drinks and
|
||||||
specialties, and tell the price of each.
|
specialties, and tell the price of each.
|
||||||
~
|
~
|
||||||
E
|
|
||||||
writing carving carvings symbols symbol~
|
|
||||||
Although it is very hard to understand, you think it looks a lot like beer,
|
|
||||||
poems about beer, and small beer-mugs.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#3008
|
#3008
|
||||||
The Reception~
|
The Reception~
|
||||||
|
@ -256,14 +256,6 @@ You see the main street.
|
||||||
~
|
~
|
||||||
0 -1 3013
|
0 -1 3013
|
||||||
E
|
E
|
||||||
danish pastry~
|
|
||||||
You see that this is truly delicious pastry. Must be made by a Dane from
|
|
||||||
Denmark (which surely is not the capital of Sweden! ). Former ruler of
|
|
||||||
Scandinavia, England, Northern Germany, Northern France, Russia, Greenland,
|
|
||||||
Iceland, Estonia etc. Etc. The sight of those large, wholesome chokoladeboller
|
|
||||||
makes your mouth water and your soul sing.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
sign~
|
sign~
|
||||||
Free instructions provided by the store:
|
Free instructions provided by the store:
|
||||||
|
|
||||||
|
@ -271,6 +263,14 @@ sign~
|
||||||
List - The baker will kindly tell you the price and sort of the bread in
|
List - The baker will kindly tell you the price and sort of the bread in
|
||||||
his bakery.
|
his bakery.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
danish pastry~
|
||||||
|
You see that this is truly delicious pastry. Must be made by a Dane from
|
||||||
|
Denmark (which surely is not the capital of Sweden! ). Former ruler of
|
||||||
|
Scandinavia, England, Northern Germany, Northern France, Russia, Greenland,
|
||||||
|
Iceland, Estonia etc. Etc. The sight of those large, wholesome chokoladeboller
|
||||||
|
makes your mouth water and your soul sing.
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#3010
|
#3010
|
||||||
The General Store~
|
The General Store~
|
||||||
|
@ -829,9 +829,14 @@ The city gate is to the west.
|
||||||
gate~
|
gate~
|
||||||
1 3112 3052
|
1 3112 3052
|
||||||
E
|
E
|
||||||
bridge footbridge~
|
wall~
|
||||||
It is too high up to reach but it looks as if one easily could walk across it
|
It is built from large grey rocks that have been fastened to each other with
|
||||||
from one tower to the other.
|
some kind of mortar. It is far too high to climb.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
tower towers~
|
||||||
|
Both of the towers are built from large grey rocks that have been fastened to
|
||||||
|
each other with some kind of mortar, just like the city wall.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
gate~
|
gate~
|
||||||
|
@ -840,14 +845,9 @@ reinforced with large iron bands to make them even more sturdy. One of the
|
||||||
doors is equipped with a very big lock.
|
doors is equipped with a very big lock.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
tower towers~
|
bridge footbridge~
|
||||||
Both of the towers are built from large grey rocks that have been fastened to
|
It is too high up to reach but it looks as if one easily could walk across it
|
||||||
each other with some kind of mortar, just like the city wall.
|
from one tower to the other.
|
||||||
~
|
|
||||||
E
|
|
||||||
wall~
|
|
||||||
It is built from large grey rocks that have been fastened to each other with
|
|
||||||
some kind of mortar. It is far too high to climb.
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#3041
|
#3041
|
||||||
|
@ -873,9 +873,14 @@ You see Main Street.
|
||||||
~
|
~
|
||||||
0 -1 3016
|
0 -1 3016
|
||||||
E
|
E
|
||||||
bridge footbridge~
|
wall~
|
||||||
It is too high up to reach but it looks as if one easily could walk across it
|
It is built from large grey rocks that have been fastened to each other with
|
||||||
from one tower to the other.
|
some kind of mortar. It is far too high to climb.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
tower towers~
|
||||||
|
Both of the towers are built from large grey rocks that have been fastened to
|
||||||
|
each other with some kind of mortar, just like the city wall.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
gate~
|
gate~
|
||||||
|
@ -884,14 +889,9 @@ reinforced with large iron bands to make them even more sturdy. One of the
|
||||||
doors is equipped with a very big lock.
|
doors is equipped with a very big lock.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
tower towers~
|
bridge footbridge~
|
||||||
Both of the towers are built from large grey rocks that have been fastened to
|
It is too high up to reach but it looks as if one easily could walk across it
|
||||||
each other with some kind of mortar, just like the city wall.
|
from one tower to the other.
|
||||||
~
|
|
||||||
E
|
|
||||||
wall~
|
|
||||||
It is built from large grey rocks that have been fastened to each other with
|
|
||||||
some kind of mortar. It is far too high to climb.
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#3042
|
#3042
|
||||||
|
@ -939,14 +939,14 @@ The road continues further south.
|
||||||
~
|
~
|
||||||
0 -1 3047
|
0 -1 3047
|
||||||
E
|
E
|
||||||
wall writing letters~
|
|
||||||
It says 'Who watches the watchmen? '
|
|
||||||
~
|
|
||||||
E
|
|
||||||
wall~
|
wall~
|
||||||
It is built from large grey rocks that have been fastened to each other with
|
It is built from large grey rocks that have been fastened to each other with
|
||||||
some kind of mortar. It is far too high to climb.
|
some kind of mortar. It is far too high to climb.
|
||||||
~
|
~
|
||||||
|
E
|
||||||
|
wall writing letters~
|
||||||
|
It says 'Who watches the watchmen? '
|
||||||
|
~
|
||||||
S
|
S
|
||||||
#3044
|
#3044
|
||||||
Poor Alley~
|
Poor Alley~
|
||||||
|
@ -1086,18 +1086,18 @@ You see the Concourse.
|
||||||
~
|
~
|
||||||
0 -1 3100
|
0 -1 3100
|
||||||
E
|
E
|
||||||
bridge~
|
wall~
|
||||||
It is built from large grey rocks that have been fastened to each other with
|
It is built from large grey rocks that have been fastened to each other with
|
||||||
some kind of mortar, just like the wall.
|
some kind of mortar. It is far too high to climb.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
opening~
|
opening~
|
||||||
You cannot really see it from here as it is somewhere beneath your feet.
|
You cannot really see it from here as it is somewhere beneath your feet.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
wall~
|
bridge~
|
||||||
It is built from large grey rocks that have been fastened to each other with
|
It is built from large grey rocks that have been fastened to each other with
|
||||||
some kind of mortar. It is far too high to climb.
|
some kind of mortar, just like the wall.
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#3052
|
#3052
|
||||||
|
@ -1118,9 +1118,14 @@ The forest edge is to the west.
|
||||||
~
|
~
|
||||||
0 -1 6092
|
0 -1 6092
|
||||||
E
|
E
|
||||||
bridge footbridge~
|
wall~
|
||||||
It is too high up to reach but it looks as if one easily could walk across it
|
It is built from large grey rocks that have been fastened to each other with
|
||||||
from one tower to the other.
|
some kind of mortar. It is far too high to climb.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
tower towers~
|
||||||
|
Both of the towers are built from large grey rocks that have been fastened to
|
||||||
|
each other with some kind of mortar, just like the city wall.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
gate~
|
gate~
|
||||||
|
@ -1129,14 +1134,9 @@ reinforced with large iron bands to make them even more sturdy. One of the
|
||||||
doors is equipped with a very big lock.
|
doors is equipped with a very big lock.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
tower towers~
|
bridge footbridge~
|
||||||
Both of the towers are built from large grey rocks that have been fastened to
|
It is too high up to reach but it looks as if one easily could walk across it
|
||||||
each other with some kind of mortar, just like the city wall.
|
from one tower to the other.
|
||||||
~
|
|
||||||
E
|
|
||||||
wall~
|
|
||||||
It is built from large grey rocks that have been fastened to each other with
|
|
||||||
some kind of mortar. It is far too high to climb.
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#3053
|
#3053
|
||||||
|
@ -1157,9 +1157,14 @@ You see the city gate.
|
||||||
gate~
|
gate~
|
||||||
1 3112 3041
|
1 3112 3041
|
||||||
E
|
E
|
||||||
bridge footbridge~
|
wall~
|
||||||
It is too high up to reach but it looks as if one easily could walk across it
|
It is built from large grey rocks that have been fastened to each other with
|
||||||
from one tower to the other.
|
some kind of mortar. It is far too high to climb.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
tower towers~
|
||||||
|
Both of the towers are built from large grey rocks that have been fastened to
|
||||||
|
each other with some kind of mortar, just like the city wall.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
gate~
|
gate~
|
||||||
|
@ -1168,14 +1173,9 @@ reinforced with large iron bands to make them even more sturdy. One of the
|
||||||
doors is equipped with a very big lock.
|
doors is equipped with a very big lock.
|
||||||
~
|
~
|
||||||
E
|
E
|
||||||
tower towers~
|
bridge footbridge~
|
||||||
Both of the towers are built from large grey rocks that have been fastened to
|
It is too high up to reach but it looks as if one easily could walk across it
|
||||||
each other with some kind of mortar, just like the city wall.
|
from one tower to the other.
|
||||||
~
|
|
||||||
E
|
|
||||||
wall~
|
|
||||||
It is built from large grey rocks that have been fastened to each other with
|
|
||||||
some kind of mortar. It is far too high to climb.
|
|
||||||
~
|
~
|
||||||
S
|
S
|
||||||
#3054
|
#3054
|
||||||
|
@ -1198,27 +1198,17 @@ You see the southern end of the temple.
|
||||||
~
|
~
|
||||||
0 -1 3001
|
0 -1 3001
|
||||||
E
|
E
|
||||||
altar~
|
|
||||||
Even though the altar is more than ten feet long it appears to be made from a
|
|
||||||
single block of white virgin marble.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
statue odin king god~
|
statue odin king god~
|
||||||
The statue represents the one-eyed Odin sitting on a his throne. He has
|
The statue represents the one-eyed Odin sitting on a his throne. He has
|
||||||
long, grey hair and beard and a strict look on his face. On top of the throne,
|
long, grey hair and beard and a strict look on his face. On top of the throne,
|
||||||
just above his shoulders, his two ravens Hugin and Munin are sitting and at his
|
just above his shoulders, his two ravens Hugin and Munin are sitting and at his
|
||||||
feet are his wolves Gere and Freke.
|
feet are his wolves Gere and Freke.
|
||||||
~
|
~
|
||||||
S
|
E
|
||||||
#3055
|
altar~
|
||||||
Odin's Store~
|
Even though the altar is more than ten feet long it appears to be made from a
|
||||||
This is the small dark room in which Odin keeps the player items that he
|
single block of white virgin marble.
|
||||||
takes care of. It is vital that this room's virtual number is exactly one
|
|
||||||
larger than the room by the temple altar.
|
|
||||||
|
|
||||||
This room has absolutely no purpose!
|
|
||||||
~
|
~
|
||||||
30 520 0 0 0 0
|
|
||||||
S
|
S
|
||||||
#3058
|
#3058
|
||||||
Ye Olde Water Shoppe~
|
Ye Olde Water Shoppe~
|
||||||
|
@ -1327,6 +1317,29 @@ You see the entrance to the Grunting Boar Inn and Tavern.
|
||||||
~
|
~
|
||||||
0 -1 3006
|
0 -1 3006
|
||||||
E
|
E
|
||||||
|
WANTED posters poster wall~
|
||||||
|
Faces of various known Killers and Thieves can barely be seen behind the
|
||||||
|
crates on the west wall. Some of them look quite familar, sorta like that guy
|
||||||
|
who you saw in the Reception a minute ago... But then again, they are rather
|
||||||
|
hard to see past the crates.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
crates opened large~
|
||||||
|
As you know, it is illegal to send contraband items through the Midgaard
|
||||||
|
Mail. The customs agents use this as a great excuse to seize liquor, rare
|
||||||
|
spices, and just about anything they might find useful or profitable.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
cobwebs~
|
||||||
|
They seem to cover everything here, even the Postmaster himself.
|
||||||
|
~
|
||||||
|
E
|
||||||
|
letters envelopes assorted~
|
||||||
|
Envelopes of all sizes are heaped into hugh piles around the room. As you
|
||||||
|
look closer, you see a letter that you had posted a full week ago, laying
|
||||||
|
unnoticed and slightly rat-chewed towards the bottom of the pile.
|
||||||
|
~
|
||||||
|
E
|
||||||
sign~
|
sign~
|
||||||
**********************************************************
|
**********************************************************
|
||||||
* *
|
* *
|
||||||
|
@ -1345,29 +1358,6 @@ sign~
|
||||||
* Type 'HELP MAIL' for more info *
|
* Type 'HELP MAIL' for more info *
|
||||||
**********************************************************
|
**********************************************************
|
||||||
~
|
~
|
||||||
E
|
|
||||||
letters envelopes assorted~
|
|
||||||
Envelopes of all sizes are heaped into hugh piles around the room. As you
|
|
||||||
look closer, you see a letter that you had posted a full week ago, laying
|
|
||||||
unnoticed and slightly rat-chewed towards the bottom of the pile.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
cobwebs~
|
|
||||||
They seem to cover everything here, even the Postmaster himself.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
crates opened large~
|
|
||||||
As you know, it is illegal to send contraband items through the Midgaard
|
|
||||||
Mail. The customs agents use this as a great excuse to seize liquor, rare
|
|
||||||
spices, and just about anything they might find useful or profitable.
|
|
||||||
~
|
|
||||||
E
|
|
||||||
WANTED posters poster wall~
|
|
||||||
Faces of various known Killers and Thieves can barely be seen behind the
|
|
||||||
crates on the west wall. Some of them look quite familar, sorta like that guy
|
|
||||||
who you saw in the Reception a minute ago... But then again, they are rather
|
|
||||||
hard to see past the crates.
|
|
||||||
~
|
|
||||||
S
|
S
|
||||||
#3063
|
#3063
|
||||||
The Midgaard Donation Room~
|
The Midgaard Donation Room~
|
||||||
|
|
|
@ -2,10 +2,6 @@
|
||||||
Rumble~
|
Rumble~
|
||||||
The Builder Academy Zone~
|
The Builder Academy Zone~
|
||||||
0 99 10 2
|
0 99 10 2
|
||||||
O 0 87 1 33 (a throne of bayonets)
|
|
||||||
O 0 10 33 2 (a waybread)
|
|
||||||
R 0 2 11 -1 (the spring)
|
|
||||||
O 0 11 99 2 (the spring)
|
|
||||||
M 0 18 1 2 (Friedrich Nietzsche)
|
M 0 18 1 2 (Friedrich Nietzsche)
|
||||||
R 0 88 1228 -1 (a advertising bulletin board)
|
R 0 88 1228 -1 (a advertising bulletin board)
|
||||||
O 0 1228 99 88 (a advertising bulletin board)
|
O 0 1228 99 88 (a advertising bulletin board)
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
Rumble~
|
Rumble~
|
||||||
Sanctus~
|
Sanctus~
|
||||||
100 199 10 2
|
100 199 10 2
|
||||||
|
O 0 219 1 129 (a pile of ashes)
|
||||||
|
M 0 211 1 129 (the phoenix)
|
||||||
M 0 206 1 162 (a chunky philosopher)
|
M 0 206 1 162 (a chunky philosopher)
|
||||||
G 1 47 99 -1 (the magic eight ball)
|
G 1 47 99 -1 (the magic eight ball)
|
||||||
D 0 162 2 1 (Thieves Avenue)
|
D 0 162 2 1 (Thieves Avenue)
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
CircleMUD~
|
CircleMUD~
|
||||||
God Simplex~
|
God Simplex~
|
||||||
1200 1299 10 0
|
1200 1299 10 0
|
||||||
M 0 1212 1 1200 (the scoreboard mob)
|
|
||||||
O 0 1212 1 1200 (a game console)
|
|
||||||
R 0 1204 3098 -1 (a holy bulletin board)
|
R 0 1204 3098 -1 (a holy bulletin board)
|
||||||
O 0 3098 99 1204 (a holy bulletin board)
|
O 0 3098 99 1204 (a holy bulletin board)
|
||||||
|
M 0 1212 1 1200 (the scoreboard mob)
|
||||||
|
O 0 1212 1 1200 (a game console)
|
||||||
R 0 1293 1227 -1 (a staff bulletin board)
|
R 0 1293 1227 -1 (a staff bulletin board)
|
||||||
O 0 1227 99 1293 (a staff bulletin board)
|
O 0 1227 99 1293 (a staff bulletin board)
|
||||||
R 0 1291 1226 -1 (a builder's bulletin board)
|
R 0 1291 1226 -1 (a builder's bulletin board)
|
||||||
|
|
|
@ -2,22 +2,21 @@
|
||||||
Rumble~
|
Rumble~
|
||||||
Sanctus II~
|
Sanctus II~
|
||||||
200 299 30 2
|
200 299 30 2
|
||||||
|
O 0 188 1 230 (an iron bound chest)
|
||||||
|
P 1 306 5 188 (a jar of naphthalene)
|
||||||
|
M 0 189 1 230 (the commander)
|
||||||
|
E 1 145 99 5 (a scale mail jacket)
|
||||||
|
M 0 209 1 210 (Bob, the achondroplastic dwarf)
|
||||||
|
E 1 171 99 17 (a short gilded staff of oak)
|
||||||
M 0 212 1 251 (a parrot with an eye patch)
|
M 0 212 1 251 (a parrot with an eye patch)
|
||||||
M 0 196 1 251 (the newbie guide)
|
M 0 196 1 251 (the newbie guide)
|
||||||
O 0 251 1 251 (a marble fountain)
|
O 0 251 1 251 (a marble fountain)
|
||||||
O 0 219 1 210 (a pile of ashes)
|
|
||||||
M 0 211 1 210 (the phoenix)
|
|
||||||
M 0 209 1 210 (Bob, the achondroplastic dwarf)
|
|
||||||
E 1 171 99 17 (a short gilded staff of oak)
|
|
||||||
M 0 33 1 266 (Homer Simpson)
|
M 0 33 1 266 (Homer Simpson)
|
||||||
M 0 30 3 220 (the spy for the underground)
|
M 0 30 3 220 (the spy for the underground)
|
||||||
M 0 30 3 212 (the spy for the underground)
|
M 0 30 3 212 (the spy for the underground)
|
||||||
M 0 210 1 265 (the quest shopkeeper)
|
M 0 210 1 265 (the quest shopkeeper)
|
||||||
O 0 307 1 242 (a jar of palmatite)
|
O 0 307 1 242 (a jar of palmatite)
|
||||||
M 0 126 1 242 (assassin)
|
M 0 126 1 242 (assassin)
|
||||||
O 0 306 1 230 (a jar of naphthalene)
|
|
||||||
M 0 189 1 230 (the commander)
|
|
||||||
E 1 145 99 5 (a scale mail jacket)
|
|
||||||
R 0 225 373 -1 (a large well)
|
R 0 225 373 -1 (a large well)
|
||||||
O 0 373 99 225 (a large well)
|
O 0 373 99 225 (a large well)
|
||||||
M 0 109 1 225 (Hazel, the wellmaster)
|
M 0 109 1 225 (Hazel, the wellmaster)
|
||||||
|
|
|
@ -3272,7 +3272,7 @@ ACMD(do_links)
|
||||||
skip_spaces(&argument);
|
skip_spaces(&argument);
|
||||||
one_argument(argument, arg);
|
one_argument(argument, arg);
|
||||||
|
|
||||||
if (!arg || !*arg) {
|
if (!is_number(arg)) {
|
||||||
zrnum = world[IN_ROOM(ch)].zone;
|
zrnum = world[IN_ROOM(ch)].zone;
|
||||||
zvnum = zone_table[zrnum].number;
|
zvnum = zone_table[zrnum].number;
|
||||||
} else {
|
} else {
|
||||||
|
@ -3409,7 +3409,7 @@ ACMD (do_zcheck)
|
||||||
struct extra_descr_data *ext, *ext2;
|
struct extra_descr_data *ext, *ext2;
|
||||||
one_argument(argument, buf);
|
one_argument(argument, buf);
|
||||||
|
|
||||||
if (!buf || !*buf || !strcmp(buf, "."))
|
if (!is_number(buf) || !strcmp(buf, "."))
|
||||||
zrnum = world[IN_ROOM(ch)].zone;
|
zrnum = world[IN_ROOM(ch)].zone;
|
||||||
else
|
else
|
||||||
zrnum = real_zone(atoi(buf));
|
zrnum = real_zone(atoi(buf));
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
#include "structs.h"
|
#include "structs.h"
|
||||||
#include "interpreter.h" /* alias_data */
|
#include "interpreter.h" /* alias_data */
|
||||||
|
|
||||||
cpp_extern const char *tbamud_version = "tbaMUD, version 3.54";
|
cpp_extern const char *tbamud_version = "tbaMUD, version 3.55";
|
||||||
cpp_extern const char *oasisolc_version = "OasisOLC 2.0.6";
|
cpp_extern const char *oasisolc_version = "OasisOLC 2.0.6";
|
||||||
cpp_extern const char *ascii_pfiles_version = "ASCII Player Files 3.0.1";
|
cpp_extern const char *ascii_pfiles_version = "ASCII Player Files 3.0.1";
|
||||||
|
|
||||||
|
|
4
src/db.h
4
src/db.h
|
@ -82,8 +82,8 @@
|
||||||
#define MOTD_FILE LIB_TEXT"motd" /* messages of the day / mortal */
|
#define MOTD_FILE LIB_TEXT"motd" /* messages of the day / mortal */
|
||||||
#define IMOTD_FILE LIB_TEXT"imotd" /* messages of the day / immort */
|
#define IMOTD_FILE LIB_TEXT"imotd" /* messages of the day / immort */
|
||||||
#define GREETINGS_FILE LIB_TEXT"greetings" /* The opening screen. */
|
#define GREETINGS_FILE LIB_TEXT"greetings" /* The opening screen. */
|
||||||
#define HELP_PAGE_FILE LIB_TEXT_HELP"screen" /* for HELP <CR> */
|
#define HELP_PAGE_FILE LIB_TEXT_HELP"help" /* for HELP <CR> */
|
||||||
#define IHELP_PAGE_FILE LIB_TEXT_HELP"iscreen" /* for HELP <CR> imms */
|
#define IHELP_PAGE_FILE LIB_TEXT_HELP"ihelp" /* for HELP <CR> imms */
|
||||||
#define INFO_FILE LIB_TEXT"info" /* for INFO */
|
#define INFO_FILE LIB_TEXT"info" /* for INFO */
|
||||||
#define WIZLIST_FILE LIB_TEXT"wizlist" /* for WIZLIST */
|
#define WIZLIST_FILE LIB_TEXT"wizlist" /* for WIZLIST */
|
||||||
#define IMMLIST_FILE LIB_TEXT"immlist" /* for IMMLIST */
|
#define IMMLIST_FILE LIB_TEXT"immlist" /* for IMMLIST */
|
||||||
|
|
|
@ -228,7 +228,7 @@ int delete_room(room_rnum rnum)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Remove this room from all shop lists. */
|
/* Remove this room from all shop lists. */
|
||||||
for (i = 0; i < top_shop; i++) {
|
for (i = 0; i <= top_shop; i++) {
|
||||||
for (j = 0;SHOP_ROOM(i, j) != NOWHERE;j++) {
|
for (j = 0;SHOP_ROOM(i, j) != NOWHERE;j++) {
|
||||||
if (SHOP_ROOM(i, j) == world[rnum].number)
|
if (SHOP_ROOM(i, j) == world[rnum].number)
|
||||||
SHOP_ROOM(i, j) = 0; /* set to the void */
|
SHOP_ROOM(i, j) = 0; /* set to the void */
|
||||||
|
|
|
@ -23,7 +23,7 @@
|
||||||
/* external variables */
|
/* external variables */
|
||||||
extern room_rnum r_mortal_start_room;
|
extern room_rnum r_mortal_start_room;
|
||||||
extern int mini_mud;
|
extern int mini_mud;
|
||||||
extern char cast_arg2[MAX_STRING_LENGTH];
|
extern char cast_arg2[MAX_INPUT_LENGTH];
|
||||||
|
|
||||||
/* external functions */
|
/* external functions */
|
||||||
void weight_change_object(struct obj_data *obj, int weight);
|
void weight_change_object(struct obj_data *obj, int weight);
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
* account the version and supply their own definition for the macro if used
|
* account the version and supply their own definition for the macro if used
|
||||||
* on an older version. You are supposed to compare this with the macro
|
* on an older version. You are supposed to compare this with the macro
|
||||||
* TBAMUD_VERSION() in utils.h. */
|
* TBAMUD_VERSION() in utils.h. */
|
||||||
#define _TBAMUD 0x030540 /* Major/Minor/Patchlevel - MMmmPP */
|
#define _TBAMUD 0x030550 /* Major/Minor/Patchlevel - MMmmPP */
|
||||||
|
|
||||||
/* If you want equipment to be automatically equipped to the same place
|
/* If you want equipment to be automatically equipped to the same place
|
||||||
* it was when players rented, set the define below to 1. */
|
* it was when players rented, set the define below to 1. */
|
||||||
|
@ -763,7 +763,6 @@ struct char_special_data {
|
||||||
|
|
||||||
struct player_special_data_saved {
|
struct player_special_data_saved {
|
||||||
byte skills[MAX_SKILLS+1]; /* array of skills plus skill 0 */
|
byte skills[MAX_SKILLS+1]; /* array of skills plus skill 0 */
|
||||||
byte PADDING0; /* used to be spells_to_learn */
|
|
||||||
int wimp_level; /* Below this # of hit points, flee! */
|
int wimp_level; /* Below this # of hit points, flee! */
|
||||||
byte freeze_level; /* Level of god who froze char, if any */
|
byte freeze_level; /* Level of god who froze char, if any */
|
||||||
sh_int invis_level; /* level of invisibility */
|
sh_int invis_level; /* level of invisibility */
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
/* ************************************************************************
|
/* ************************************************************************
|
||||||
* file: asciipasswd.c (derived from mudpasswd.c) Part of CircleMud *
|
* file: asciipasswd.c (derived from mudpasswd.c) Part of tbaMUD *
|
||||||
* Usage: generating hashed passwords for an ascii playerfile *
|
* Usage: generating hashed passwords for an ascii playerfile. *
|
||||||
* Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
|
* Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
|
||||||
* All Rights Reserved *
|
* All Rights Reserved *
|
||||||
************************************************************************* */
|
************************************************************************* */
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* ************************************************************************
|
/* ************************************************************************
|
||||||
* file: autowiz.c Part of CircleMUD *
|
* file: autowiz.c Part of tbaMUD *
|
||||||
* Usage: self-updating wizlists *
|
* Usage: self-updating wizlists *
|
||||||
* Written by Jeremy Elson *
|
* Written by Jeremy Elson *
|
||||||
* All Rights Reserved *
|
* All Rights Reserved *
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* ************************************************************************
|
/* ************************************************************************
|
||||||
* file: listrent.c Part of CircleMUD *
|
* file: listrent.c Part of tbaMUD *
|
||||||
* Usage: list player rent files *
|
* Usage: list player rent files *
|
||||||
* Written by Jeremy Elson *
|
* Written by Jeremy Elson *
|
||||||
* All Rights Reserved *
|
* All Rights Reserved *
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* ************************************************************************
|
/* ************************************************************************
|
||||||
* file: plrtoascii.c Part of CircleMud *
|
* file: plrtoascii.c Part of tbaMUD *
|
||||||
* Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
|
* Copyright (C) 1990, 1991 - see 'license.doc' for complete information. *
|
||||||
* All Rights Reserved *
|
* All Rights Reserved *
|
||||||
************************************************************************* */
|
************************************************************************* */
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
/* code to convert 2.20 shop files to 3.0 shop files - written by Jeff Fink */
|
/* ************************************************************************
|
||||||
|
* file: shopconv.c Part of tbaMUD *
|
||||||
|
* Usage: code to convert 2.20 shop files to 3.0 shop files *
|
||||||
|
* Written by Jeff Fink *
|
||||||
|
************************************************************************* */
|
||||||
|
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
#include "sysdep.h"
|
#include "sysdep.h"
|
||||||
|
|
|
@ -1,17 +1,9 @@
|
||||||
/*
|
/* ************************************************************************
|
||||||
* sign.c: a program to present text on a TCP port
|
* file: sign.c Part of tbaMUD *
|
||||||
*
|
* Usage: A program to present text on a TCP port. *
|
||||||
* Author: Jeremy Elson (jelson@circlemud.org)
|
* sign <port> <filename | port> *
|
||||||
* Usage: sign <port> <filename> or
|
* Written by Jeremy Elson *
|
||||||
* sign <port> -
|
************************************************************************* */
|
||||||
*
|
|
||||||
* '-' indicates file should be read from stdin.
|
|
||||||
*
|
|
||||||
* This program is in the public domain. It may be copied, redistributed,
|
|
||||||
* reused, modified, etc., but a notice of my authorship must be maintained.
|
|
||||||
*
|
|
||||||
* This program comes with no warranty of any kind, expressed or implied.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define MAX_FILESIZE 8192
|
#define MAX_FILESIZE 8192
|
||||||
#define LINEBUF_SIZE 128
|
#define LINEBUF_SIZE 128
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/* ************************************************************************
|
/* ************************************************************************
|
||||||
* file: split.c Part of CircleMud *
|
* file: split.c Part of tbaMUD *
|
||||||
* Usage: split one large file into multiple smaller ones, with index *
|
* Usage: split one large file into multiple smaller ones, with index *
|
||||||
* Written by Jeremy Elson *
|
* Written by Jeremy Elson *
|
||||||
* All Rights Reserved *
|
* All Rights Reserved *
|
||||||
|
|
|
@ -1,10 +1,8 @@
|
||||||
/* ************************************************************************
|
/* ************************************************************************
|
||||||
* File: wld2html.c *
|
* File: webster.c Part of tbaMUD *
|
||||||
* Usage: Convert a DikuMUD .wld file into a series of .html files *
|
* Usage: Use an online dictionary via tell m-w <word>. *
|
||||||
* *
|
* *
|
||||||
* This program is in the public domain. *
|
* Based on the Circle 3.0 syntax checker and wld2html programs. *
|
||||||
* Written (QUICKLY AND DIRTILY) by Jeremy Elson (jelson@circlemud.org) *
|
|
||||||
* Based on the Circle 3.0 syntax checker program (scheck.c) *
|
|
||||||
************************************************************************ */
|
************************************************************************ */
|
||||||
|
|
||||||
#define log(msg) fprintf(stderr, "%s\n", msg)
|
#define log(msg) fprintf(stderr, "%s\n", msg)
|
||||||
|
|
|
@ -1,10 +1,10 @@
|
||||||
/* ************************************************************************
|
/* ************************************************************************
|
||||||
* File: wld2html.c *
|
* File: wld2html.c Part of tbaMUD *
|
||||||
* Usage: Convert a DikuMUD .wld file into a series of .html files *
|
* Usage: Convert a DikuMUD .wld file into a series of .html files *
|
||||||
* *
|
* *
|
||||||
* This program is in the public domain. *
|
* This program is in the public domain. *
|
||||||
* Written (QUICKLY AND DIRTILY) by Jeremy Elson (jelson@circlemud.org) *
|
* Written (QUICKLY AND DIRTILY) by Jeremy Elson *
|
||||||
* Based on the Circle 3.0 syntax checker program (scheck.c) *
|
* Based on the Circle 3.0 syntax checker program *
|
||||||
************************************************************************ */
|
************************************************************************ */
|
||||||
|
|
||||||
#define log(msg) fprintf(stderr, "%s\n", msg)
|
#define log(msg) fprintf(stderr, "%s\n", msg)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue