- Removed the do_oasis function and called the Xedit commands directly (thanks Rhade).

- Updated idle timer to keep track of imms too (thanks Jamdog).
- Standardized OLC messages.
- Removed special procedures that were replaced with trigedit.
- Updated README.WIN, README.MSVC8, and README.CYGWIN.
--Rumble
This commit is contained in:
Rumble 2007-03-28 12:53:48 +00:00
parent f34cc2c8ed
commit 7f65248b2a
26 changed files with 534 additions and 1006 deletions

5
FAQ
View file

@ -1,7 +1,6 @@
Frequently Asked Questions (FAQ) for tbaMUD with Answers
Updated: Apr 2007 Updated: Apr 2007
Frequently Asked Questions (FAQ) for tbaMUD with Answers
This file is intended to cover common questions related to tbaMUD. Any This file is intended to cover common questions related to tbaMUD. Any
contributions and corrections are more than welcome. It is currently contributions and corrections are more than welcome. It is currently
maintained by Rumble of the Builder Academy. Please stop by the Builder maintained by Rumble of the Builder Academy. Please stop by the Builder

21
README
View file

@ -1,7 +1,6 @@
tbaMUD README File
---------------------
Updated: Apr 2007 Updated: Apr 2007
tbaMUD README
-------------
All requests for help or bugs should be reported to: builderacademy.net 9091. All requests for help or bugs should be reported to: builderacademy.net 9091.
Information about CircleMUD can be found at the CircleMUD Home Page and FTP: Information about CircleMUD can be found at the CircleMUD Home Page and FTP:
@ -32,29 +31,21 @@ Many of these instructions are outdated, please feel free to update them.
AMIGA - If you are using an Amiga running AmigaDOS. (If you're running AMIGA - If you are using an Amiga running AmigaDOS. (If you're running
NetBSD or Linux on an Amiga, use README.UNIX instead.) NetBSD or Linux on an Amiga, use README.UNIX instead.)
ARC - If you are using an Acorn running RiscOS. ARC - If you are using an Acorn running RiscOS.
BORLAND - For those using Borland under Windows. BORLAND - For those using Borland under Windows.
CYGWIN - If you are using Cygwin shell in Windows.
CYGWIN - If you are using Cygwin shell in Windows (Updated 12/2006).
MSVC# - If you are using MSVC. MSVC# - If you are using MSVC.
OS2 - If you are using OS/2 Warp Connect v3.0 or OS/2 v2.x. OS2 - If you are using OS/2 Warp Connect v3.0 or OS/2 v2.x.
UNIX - If you have any type UNIX system, including Linux, MkLinux, Ultrix, UNIX - If you have any type UNIX system, including Linux, MkLinux, Ultrix,
HP/UX, Solaris, SunOS, IRIX, FreeBSD, OpenBSD, NetBSD, BSDi, HP/UX, Solaris, SunOS, IRIX, FreeBSD, OpenBSD, NetBSD, BSDi,
Macintosh OS X, etc. Macintosh OS X, etc.
VMS - If you happen to be on OpenVMS. VMS - If you happen to be on OpenVMS.
WATCOM - If using WATCOM under Windows. WATCOM - If using WATCOM under Windows.
WIN - If you are using Windows. WIN - If you are using Windows.
If you are interested in porting tbaMUD to a new platform, see the If you are interested in porting tbaMUD to a new platform, see the file
file doc/porting.txt for some tips. doc/porting.txt for some tips.
For a small, private MUD, or a MUD used only for testing and development, For a small, private MUD, or a MUD used only for testing and development,
about 10 megs of disk space and 16 megs of memory should be sufficient. about 10 megs of disk space and 16 megs of memory should be sufficient.
For large, public MUDs with a large player base, 30 megs to 50 megs of For large, public MUDs with a large player base, 30 megs to 50 megs of
disk space and at least 32 megs of memory are recommended. Free memory disk space and at least 32 megs of memory are recommended. Free memory

View file

@ -5,6 +5,13 @@ The Builder Academy
builderacademy.net 9091 builderacademy.net 9091
tbaMUD 3.52 tbaMUD 3.52
[Mar 27 2007] - Rumble
Removed the do_oasis function and called the Xedit commands directly (thanks Rhade).
[Mar 25 2007] - Rumble
Updated idle timer to keep track of imms too (thanks Jamdog).
Standardized OLC messages.
Removed special procedures that were replaced with trigedit.
Updated README.WIN, README.MSVC8, and README.CYGWIN.
[Mar 20 2007] - Rumble [Mar 20 2007] - Rumble
Added object type CHAIR (thanks Dark). Added object type CHAIR (thanks Dark).
Added ZZZ directories to plrfiles and plrvars (thanks Zizazat). Added ZZZ directories to plrfiles and plrvars (thanks Zizazat).
@ -26,7 +33,7 @@ tbaMUD 3.52
Added send_cannot_edit function (thanks Rhade). Added send_cannot_edit function (thanks Rhade).
[Feb 26 2007] - Rumble [Feb 26 2007] - Rumble
updated CYGWIN.README, FAQ, and README updated CYGWIN.README, FAQ, and README
Added in game changelog command (thanks Rhade). Added an in game changelog command (thanks Rhade).
Moved do_file to act.wizard.c. Moved do_file to act.wizard.c.
Alphabetized Makefile.in, yeah I'm anal like that. Alphabetized Makefile.in, yeah I'm anal like that.
Clarified licheck so people know to enter Q to accept the license and quit. Clarified licheck so people know to enter Q to accept the license and quit.

View file

@ -1,4 +1,5 @@
Compiling tbaMUD Updated: Apr 2007
Compiling tbaMUD
under Microsoft Windows using CygWin under Microsoft Windows using CygWin
tbaMUD compiles under Cygwin without needing any special modifications. tbaMUD compiles under Cygwin without needing any special modifications.
@ -33,6 +34,25 @@ another form of Unix:
example "C:\tbaMUD". "cd c:/tbaMUD" "dir" in the listed files you should see example "C:\tbaMUD". "cd c:/tbaMUD" "dir" in the listed files you should see
one called configure. DO NOT go into the SRC directory yet. one called configure. DO NOT go into the SRC directory yet.
OPTIONAL: Make the following change to src/Makefile.in to make copyover work:
--- Makefile.in.old 2007-02-26 05:52:19.000000000 +0100
+++ Makefile.in 2007-03-26 17:21:56.000000000 +0200
@@ -61,6 +61,8 @@ circle:
$(MAKE) $(BINDIR)/circle
$(BINDIR)/circle : $(OBJFILES)
+ @-rm $(BINDIR)/circleold.exe
+ @-mv $(BINDIR)/circle.exe $(BINDIR)/circleold.exe
$(CC) -o $(BINDIR)/circle $(PROFILE) $(OBJFILES) $(LIBS)
clean:
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
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
4) Run the configure script by typing "./configure". This will automatically 4) Run the configure script by typing "./configure". This will automatically
detect what programs and library functions are available, and create the detect what programs and library functions are available, and create the
files "Makefile" and "conf.h" based on the results. files "Makefile" and "conf.h" based on the results.
@ -62,12 +82,8 @@ reading the forums at http://cwg.lazuras.org/ or stop by TBA for assistance.
It really can not be stressed enough: READ EVERYTHING. It really can not be stressed enough: READ EVERYTHING.
Credit where credit is due: Authors: Jeremy Elson, David Goldstein, Tony Robbins, and George Greer.
Some parts of this document have been derived or outright copied from other
files by: Jeremy Elson, David Goldstein, Tony Robbins, and George Greer
Rumble Rumble
Rumble@builderacademy.net
The Builder Academy The Builder Academy
builderacademy.net 9091 builderacademy.net 9091

View file

@ -1,3 +1,4 @@
Updated: Apr 2007
Compiling CircleMUD under Microsoft Windows XP Compiling CircleMUD under Microsoft Windows XP
using Microsoft Visual C++ 2005 (8.0) using Microsoft Visual C++ 2005 (8.0)
@ -68,4 +69,17 @@ George Greer
greerga@circlemud.org greerga@circlemud.org
Jason Pullara Jason Pullara
webmaster@geekstreak.com webmaster@geekstreak.com
To eliminate warnings like these:
warning C4996: 'strcpy': This function or variable may be unsafe.
warning C4996: 'getch': The POSIX name for this item is deprecated.
Do this:
In Solution Explorer
Right click the 'project'
Select 'Properties' which brings up the Property Pages dialog
Expand 'Configuration Properties'
Expand 'C/C++'
Click on Preprocessor
At the end of the 'Preprocessor Definitions' add:
;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE

View file

@ -1,52 +1,38 @@
Compiling CircleMUD Updated: Apr 2007
under Microsoft Windows 95 and NT Compiling tbaMUD
by Jeremy Elson under Microsoft Windows
For help, write to help@circlemud.org
There are a number of different compilers available for Microsoft Windows
95 and NT that can be used to compile CircleMUD. Each compiler works
differently, so each compiler has a different set of instructions.
For up-to-date information on compiling CircleMUD under Windows, check out
Rob Baumstark's page at http://shirak.circlemud.net/
There are a number of different compilers available for Microsoft Windows that
can be used to compile tbaMUD. Each compiler works differently, so each
compiler has a different set of instructions.
We currently have instructions for using the following compilers: We currently have instructions for using the following compilers:
1. Cygnus CYGWIN (Formerly Cygnus GNU-Win32). This is a FREE 1. Cygnus CYGWIN (Formerly Cygnus GNU-Win32). This is a FREE compiler for
compiler for Microsoft Windows 95 and NT! If you don't own a Microsoft Windows! If you don't own a compiler, you can just download this
compiler, you can just download this one off the net and get one off the net and get tbaMUD up and running in no time. Read the file
Circle up and running in no time. Read the file README.CYGWIN README.CYGWIN.
(submitted by David Goldstein <goldstei@cs.sunysb.edu>).
Please note however that the CYGWIN system is not recommended
for those unfamiliar with the Unix environment.
2. Microsoft Visual C++ version 4.x -- read the file README.MSVC4 2. Microsoft Visual C++ version 4.x -- read the file README.MSVC4.
3. Microsoft Visual C++ version 5.x -- read the file README.MSVC5 3. Microsoft Visual C++ version 5.x -- read the file README.MSVC5.
4. Borland C++ -- read the file README.BORLAND 4. Microsoft Visual C++ version 6.x -- read the file README.MSVC6.
5. Watcom C++ v.11 -- read the file README.WATCOM 5. Microsoft Visual C++ version 8.x -- read the file README.MSVC8. This is
also called Microsoft Visual C++ 2005 and the express edition is free and
can be downloaded from Microsoft.
6. Borland C++ -- read the file README.BORLAND
It should be possible to compile CircleMUD using other compilers that are 7. Watcom C++ v.11 -- read the file README.WATCOM
not listed here, or other versions of these compilers -- as long as they
support long filenames, etc. However, we don't have instructions handy
for those compilers. Rob's page (http://www.connect.ab.ca/~rbmstrk) has
a lot of useful information about compiling under Windows; try looking
there for tips.
However, it not easy (and maybe even impossible) to compile at all It should be possible to compile tbaMUD using other compilers that are not
under Windows 3.x or DOS because they lack a number of features that listed here, or other versions of these compilers -- as long as they support
Circle requires such as the Win32 API and long filenames. It is long filenames, etc. However, we don't have instructions handy for those
theoretically possible to compile under Windows 3.x by finding 3.x API compilers. Feel free to submit your own.
equivalents to the Win32 API calls, and changing all the filenames in
the entire distribution to fit the 8.3 DOS/Win3.x filenaming standard,
but I will never do this.
Have fun! Have fun!
For help, check out http://www.cwg.lazuras.org
Jeremy Elson Originally written by: Jeremy Elson
(To get help, write to help@circlemud.org)

View file

@ -734,7 +734,7 @@ is 4-20 points damage.
The question often comes up as to what damage a weapon should inflict. I The question often comes up as to what damage a weapon should inflict. I
will attempt to explain. To understand damage you first need to know hitpoints. will attempt to explain. To understand damage you first need to know hitpoints.
A player starts with 10 hitpoints. Then they gain a certain amount depending on A player starts with 10 hitpoints. Then they gain a certain amount depending on
their class when they level. Stock CircleMUD uses the following: Magic Users their class when they level. Stock tbaMUD uses the following: Magic Users
gain 3-8, Clerics 5-10, Thieves 7-13, Warriors 10-15. So a level 1 Warrior gain 3-8, Clerics 5-10, Thieves 7-13, Warriors 10-15. So a level 1 Warrior
will have 20-25 hitpoints. Now, let us apply common sense. A weapon that does will have 20-25 hitpoints. Now, let us apply common sense. A weapon that does
25 points of damage could kill a level 1 player in one hit. While a weapon with 25 points of damage could kill a level 1 player in one hit. While a weapon with
@ -847,19 +847,16 @@ These are numerous and I will add them as people ask questions about them.
#31 #31
CYGWIN README.CYGWIN README-CYGWIN COMPILER SHELLS CYGWIN README.CYGWIN README-CYGWIN COMPILER SHELLS
The README.Cygwin that comes with CircleMUD is outdated. Below is current and Compiling tbaMUD
works as of December 2006.
Compiling CircleMUD
under Microsoft Windows using CygWin under Microsoft Windows using CygWin
CircleMUD 3.1 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 family of compilers, and a full set of programs and libraries for Windows users
to compile and run programs from source code intended for Unix. It can be to compile and run programs from source code intended for Unix. It can be
downloaded from: http://cygwin.com/ downloaded from: http://cygwin.com/
Compiling Circle 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
@ -872,18 +869,17 @@ another form of Unix:
Click Next. Click Next.
Install, follow prompts. Install, follow prompts.
2) Download and uncompress the latest version of CircleMUD. TBA is now 2) Download and uncompress the latest version of tbaMUD:
recommending everyone use CWG (CircleMUD With Goodies) Buddha since it comes http://cwg.lazuras.org/modules.php?name=Downloads&d_op=viewdownload&cid=16
pre-packaged with many important features like OLC and Trigedit. Join the Join the forums as they will be a great resource for any problems that you
forum and download Buddha at: http://cwg.lazuras.org/ The forums will encounter. Once you download and uncompress tbaMUD (I use winRAR) read
also be a great resource for any problems that come up. Once you download through the /doc directory.
and uncompress Buddha (I use winRAR) read 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 CircleMUD 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:\circle". "cd c:/circle" "dir" in the listed files you should see example "C:\tbaMUD". "cd c:/tbaMUD" "dir" in the listed files you should see
one called configure. DO NOT go into the SRC directory yet. one called configure. DO NOT go into the SRC directory yet.
4) Run the configure script by typing "./configure". This will automatically 4) Run the configure script by typing "./configure". This will automatically
@ -895,12 +891,12 @@ another form of Unix:
an executable, you can also try "sh configure", "sh ./configure", an executable, you can also try "sh configure", "sh ./configure",
"bash configure" and "bash ./configure" until one of them works. "bash configure" and "bash ./configure" until one of them works.
5) NOW change to the /circle/src directory "cd src", and type "make", and watch 5) NOW change to the /tbaMUD/src directory "cd src", and type "make", and watch
CircleMUD and the additional utilities included in the Circle distribution tbaMUD and the additional utilities included in the tbaMUD distribution
automatically being compiled and placed in /circle/bin. automatically being compiled and placed in /tbaMUD/bin.
6) Go back to /circle, and run the MUD either directly by typing 6) Go back to /tbaMUD, and run the MUD either directly by typing
"bin/circle", or by using the "./autorun &" script. "bin/tbaMUD", or by using the "./autorun &" script.
7) Start a telnet program. Open a connection to your own machine "localhost" 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 on port 4000. You should see the MUD's login screen welcoming you. The
@ -908,20 +904,17 @@ another form of Unix:
If you have problems, read this document again. Most of the questions received 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 email or which are posted to USENET newsgroups are answered in this file, or
in other documents included in the CircleMUD distribution. If you are still 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 having problems and you're *sure* that your question is not answered in this
document or in one of the others files in the /circle/doc directory, try document or in one of the others files in the /tbaMUD/doc directory, try
reading the through the CircleMUD website at: http://www.circlemud.org reading the forums at http://cwg.lazuras.org/ or stop by TBA for assistance.
It really can not be stressed enough: READ EVERYTHING. It really can not be stressed enough: READ EVERYTHING.
Credit where credit is due: Credit where credit is due:
Some parts of this document have been derived or outright copied from other Some parts of this document have been derived or outright copied from other
files in the CircleMUD distribution by: files by: Jeremy Elson, David Goldstein, Tony Robbins, and George Greer
Jeremy Elson
David Goldstein
Tony Robbins
George Greer
Rumble Rumble
Rumble@@builderacademy.net Rumble@@builderacademy.net
@ -932,9 +925,9 @@ See also: CODING, DOWNLOADS
#31 #31
TILDES ~ TILDES ~
On stock CircleMUD a tilde is used in the world files to denote an end of line. On tbaMUD a tilde is used in the world files to denote an end of line. This way
This way the files can be saved and read. Because of this adding a tilde in any the files can be saved and read. Because of this adding a tilde in any of the
of the editors on older versions of CircleMUD could make the MUD unbootable. editors on older versions of CircleMUD could make the MUD unbootable.
See also: WORLD-FILE See also: WORLD-FILE
#31 #31
@ -1062,23 +1055,21 @@ CWG BUDDHA SUNTZU RASPUTIN CIRCLEMUD-WITH-GOODIES
CWG is short for CircleMUD with Goodies. It is a customized codebase free CWG is short for CircleMUD with Goodies. It is a customized codebase free
to download from http://cwg.lazuras.org/. It comes in three versions: Buddha, to download from http://cwg.lazuras.org/. It comes in three versions: Buddha,
Suntzu, and Rasputin. Suntzu, and Rasputin. CWG is also nice enough to host the tbaMUD forums and
downloads section.
See also: RESOURCES See also: RESOURCES
#31 #31
SOURCES RESOURCES CODEBASE FTP DOWNLOADS DOCUMENTATION OLC-SOURCE CODEOLC OLCCODE OLC-CODE CODE-OLC WTFAQ MAILING-LISTS FORUMS MAILINGLISTS GROUPS SOURCES RESOURCES CODEBASE FTP DOWNLOADS DOCUMENTATION OLC-SOURCE CODEOLC OLCCODE OLC-CODE CODE-OLC WTFAQ MAILING-LISTS FORUMS MAILINGLISTS GROUPS
Source: http://cwg.lazuras.org/modules.php?name=Downloads&d_op=viewdownload&cid=16
CWG: http://cwg.lazuras.org/ CWG: http://cwg.lazuras.org/
Stock: ftp://ftp.circlemud.org/pub/CircleMUD/3.x/
Trigedit: http://builderacademy.net/Oasis_DG_pages/contents/downloads.htm Trigedit: http://builderacademy.net/Oasis_DG_pages/contents/downloads.htm
GDB: http://www.cs.clemson.edu/~ihcho/courses/cs360/common/gdb.html GDB: http://www.cs.clemson.edu/~ihcho/courses/cs360/common/gdb.html
Documentation: Documentation:
http://www.circlemud.org
ftp://ftp.circlemud.org/pub/CircleMUD/3.x/uncompressed/circle-3.1/doc/
http://builderacademy.net/Oasis_DG_pages/index.html http://builderacademy.net/Oasis_DG_pages/index.html
http://www.circlemud.org/cdp/wtfaq/ http://www.circlemud.org/cdp/wtfaq/
http://developer.circlemud.org/
You should join the following forums and mailing lists. Learn how to search You should join the following forums and mailing lists. Learn how to search
them for any problems you have: them for any problems you have:
@ -1264,7 +1255,7 @@ road.
what you intended to have there all along. Novels have editors, and so what you intended to have there all along. Novels have editors, and so
should any zone. should any zone.
2) Add secrets! Reward players for participating in game that the zone 2) Add secrets! Reward players for participating in the game that the zone
represents. Always include at least one interesting thing per three or so represents. Always include at least one interesting thing per three or so
rooms. For example, have a bench in the garden or a table loaded to the rooms. For example, have a bench in the garden or a table loaded to the
room. Many objects don't have to do anything, just break up the sparse room. Many objects don't have to do anything, just break up the sparse
@ -1497,7 +1488,7 @@ road.
browns, and yellows unless you can make that description only show during browns, and yellows unless you can make that description only show during
that season. that season.
@cNOTE: If you would like to use this information for your game, you may do so @cNOTE:@n If you would like to use this information for your game, you may do so
so long as you copy the entirety as is, keep Elaseth's copyright label so long as you copy the entirety as is, keep Elaseth's copyright label
at the top of it, and make any corrections as specific to your mud in at the top of it, and make any corrections as specific to your mud in
parenthesis. If you wish to use this as a basis for your own building parenthesis. If you wish to use this as a basis for your own building
@ -1708,7 +1699,7 @@ http://www.degraeve.com/img2txt.php
See also: TBAMAP, MAPPING See also: TBAMAP, MAPPING
#31 #31
ABBREVIATIONS ABBREVIATIONS ABBREVS
We have added abbreviations so you do not have to type everything exactly as We have added abbreviations so you do not have to type everything exactly as
it appears. This also means that when you enter keywords in OLC you do not have it appears. This also means that when you enter keywords in OLC you do not have
@ -1841,7 +1832,7 @@ Be original, finish what you start, have fun, and don't forget to breathe!
#31 #31
CALENDAR CALENDER MONTHS WEEKS DAYS HOURS CALENDAR CALENDER MONTHS WEEKS DAYS HOURS
The CircleMUD calendar consists of 75 seconds per minute, 35 days a month and The tbaMUD calendar consists of 75 seconds per minute, 35 days a month and
17 months a year. 17 months a year.
Days of the week: Days of the week:
@ -2113,11 +2104,10 @@ FREEZE THAW FREEZING FROZEN
Usage: freeze [target] Usage: freeze [target]
thaw [target] thaw [target]
FREEZE, originally invented here at CircleMUD (we think), is used to prevent FREEZE is used to prevent a player from playing. If frozen, the game will
a player from playing. If frozen, the game will ignore all commands entered ignore all commands entered by the player, including QUIT, until the player is
by the player, including QUIT, until the player is unfrozen with THAW. unfrozen with THAW. Obviously, this command should only be used in extreme
Obviously, this command should only be used in extreme disciplinary disciplinary circumstances.
circumstances.
#31 #31
GOTO TRANSFER TRANSPORT TELEPORT GOTO TRANSFER TRANSPORT TELEPORT
@ -2272,7 +2262,7 @@ NOHASSLE HASSLE DARK NO_HASSLE DISABLE NOHASSEL HASSEL NO-HASSLE
Usage: nohassle Usage: nohassle
Toggles a flag to prevent aggressive monsters from attacking and also prevents Toggles a flag to prevent aggressive monsters from attacking, and also prevents
immortals from firing triggers. If you wish to test triggers you must turn immortals from firing triggers. If you wish to test triggers you must turn
nohassle off. nohassle off.
@ -2439,7 +2429,7 @@ TIME TICKS
Usage: time Usage: time
Gives you the current game time. CircleMUD uses zulu time 0-24 hours. There are Gives you the current game time. tbaMUD uses zulu time 0-24 hours. There are
75 seconds per minute, 35 days per month, and 17 months per year. 1 MUD year 75 seconds per minute, 35 days per month, and 17 months per year. 1 MUD year
takes about 12 days. takes about 12 days.
@ -2677,7 +2667,7 @@ entity by its Vnum. Vnums are not seen by mortal players. Each zone also has
a Vnum. The zone Vnum for any zone is simply the room, mob, object, shop, or a Vnum. The zone Vnum for any zone is simply the room, mob, object, shop, or
trigger Vnum divided by 100. For example, The Builder Academy is zone 13, trigger Vnum divided by 100. For example, The Builder Academy is zone 13,
consisting of Vnums 1300 to 1399. consisting of Vnums 1300 to 1399.
CircleMUD worlds are divided into distinct sections called zones. Each tbaMUD worlds are divided into distinct sections called zones. Each
zone typically consists of a single region of the MUD's virtual world with a zone typically consists of a single region of the MUD's virtual world with a
consistent storyline. Each zone can define its own rooms, mobs, objects, consistent storyline. Each zone can define its own rooms, mobs, objects,
shops, and triggers. A single zone typically contains 100 rooms, 100 mobs, 100 shops, and triggers. A single zone typically contains 100 rooms, 100 mobs, 100
@ -2692,7 +2682,7 @@ See also: TERMINOLOGY, VNUM, SHOW-ZONES, AREAS
#31 #31
GCC GCC
Several people have problems with configuring CircleMUD in cygwin the first Several people have problems with configuring tbaMUD in cygwin the first
time. They will get an error saying "GCC could not be found" This means a C time. They will get an error saying "GCC could not be found" This means a C
compiler was not installed because you failed to follow the directions under compiler was not installed because you failed to follow the directions under
HELP CYGWIN. Reread them and add the compiler to the default download. HELP CYGWIN. Reread them and add the compiler to the default download.
@ -3176,7 +3166,7 @@ wait 1 s
%load% <obj|mob> <vnum> [name [position]] %load% <obj|mob> <vnum> [name [position]]
This command loads a mob or object into the game. No-take objects loaded to This command loads a mob or object into the game. No-take objects loaded to
a mob will load to the room. an actor will load to the room. NO_RENT objects can not be loaded.
load an object to room: %load% obj 1300 load an object to room: %load% obj 1300
load a mob to room : %load% mob 1300 load a mob to room : %load% mob 1300
@ -3207,7 +3197,7 @@ See also: POSITIONS
#31 #31
%TELEPORT% WTELEPORT OTELEPORT MTELEPORT PORTALS %TRANSPORT% TRIG-TELEPORT %TELEPORT% WTELEPORT OTELEPORT MTELEPORT PORTALS %TRANSPORT% TRIG-TELEPORT
Stock CircleMUD does not have an object type portal. This is instead done with Stock tbaMUD does not have an object type portal. This is instead done with
trigedit. trigedit.
%teleport% <victim> <location> %teleport% <victim> <location>
@ -3876,8 +3866,6 @@ findmob.<room vnum X>(<mob vnum Y>)
&%var% - it, you, he/she Example: @RTSTAT 91@n &%var% - it, you, he/she Example: @RTSTAT 91@n
*%var% - it, you, him/her *%var% - it, you, him/her
^%var% - its, your, his/her ^%var% - its, your, his/her
object only
'%obj% - something, name
Use \ for do not parse, or %% for %. Use \ for do not parse, or %% for %.
@ -4008,7 +3996,7 @@ next_in_room - The next mob/player in the room as a variable (id) nice to
pos() - %actor.pos% returns position. Subfield modifies. Sleeping, pos() - %actor.pos% returns position. Subfield modifies. Sleeping,
resting, sitting, fighting, standing. @RTSTAT 1399, 20997@n resting, sitting, fighting, standing. @RTSTAT 1399, 20997@n
prac() - The actor's number of practices. Subfield modifies. prac() - The actor's number of practices. Subfield modifies.
race - The actor's race, as a string. (not used in stock Circle) race - The actor's race, as a string. (not used in tbaMUD)
room - The room the actor is in as a room variable. room - The room the actor is in as a room variable.
sex - The actor's sex, as a string: MALE, FEMALE, or NEUTRAL. sex - The actor's sex, as a string: MALE, FEMALE, or NEUTRAL.
skill() - The percentage of learnedness in the skill subfield. skill() - The percentage of learnedness in the skill subfield.
@ -4748,7 +4736,7 @@ See also: TIMER, %TIMER%, %TIME%
#31 #31
TRIGEDIT-ADVANCED-EXAMPLES TRIGEDIT-ADVANCED-EXAMPLES
To add life to the worlds CircleMUD uses something called triggers. There are To add life to the worlds tbaMUD uses something called triggers. There are
three things in game that can have triggers attached to them: mobiles, objects, three things in game that can have triggers attached to them: mobiles, objects,
and rooms. Examples of common triggers include: and rooms. Examples of common triggers include:
@ -5311,12 +5299,16 @@ positions to an array. See the examples below.
@RTSTAT 150, 41005, 1325, 57715@n @RTSTAT 150, 41005, 1325, 57715@n
#31 #31
ASSEMBLIES ASSEMBLE ASSEMBLY VEHICLES MAKE BAKE BREW CRAFT FLETCH KNIT MIX THATCH WEAVE ASSEDIT FORGE TRIG-EXAMPLES ASSEMBLIES ASSEMBLE ASSEMBLY VEHICLES MAKE BAKE BREW CRAFT FLETCH KNIT MIX THATCH WEAVE ASSEDIT FORGE SMOKE SMOKING CIGARS CIGARETTES PIPES SHOTGUN BLAST SHOOT RANGED-WEAPONS FIRE-WEAPONS BOWS QUIVERS MISSILES GUNS
These are no longer implemented here since the same thing can be done with
Trigedit.
@RTSTAT 38, 48, 335@n These are not implemented since the same thing can be done with trigedit.
Assemblies: @RTSTAT 38, 48, 335@n
Smokables: @RTSTAT 159@n
Furniture: @RTSTAT 1399@n
Weapons: @RTSTAT 1361, 9000, 11840, 13005@n
See Also: @RTRIG-QUESTS@n
#31 #31
DG_AFFECTS SCRIPT-AFFLICTED AFFLICTED DG-AFFECTS DG-AFFECTS %DG_AFFECT% DG-EFFECT DG_EFFECT DG_AFFECTS SCRIPT-AFFLICTED AFFLICTED DG-AFFECTS DG-AFFECTS %DG_AFFECT% DG-EFFECT DG_EFFECT
@ -5440,29 +5432,6 @@ all these options.
Warning: Some clients will give you problems since they use special characters Warning: Some clients will give you problems since they use special characters
like the / character (Avplay, Mush, and SimpleMU). like the / character (Avplay, Mush, and SimpleMU).
#31
FURNITURE COUCH CHAIR
There is no object type for furniture since this is stock CircleMUD. But it
can be done through trigedit. Just set the object type to OTHER and attach a
trigger similar to the example below. Just change the word chair to the name
you desire.
Example: @RTSTAT 1399@n
#31
SMOKE SMOKING CIGARS CIGARETTES PIPES
Smokable objects are not implemented on CircleMUD. The same effect may be
created through trigedit.
@RTSTAT 159@n
#31
SHOTGUN BLAST SHOOT RANGED-WEAPONS FIRE-WEAPONS BOWS QUIVERS MISSILES GUNS
Object type Fire Weapon and MISSILE are not implemented in CircleMUD. The
same effect may be created through trigedit.
@RTSTAT 1361, 9000, 11840, 13005@n
#31 #31
TRIGEDIT TRIGS TRIGEDITOR TRIGGEREDIT TRIGGER-EDIT TRIGGERS DG-SCRIPTS TRIG-HELP SCRIPTS MOBPROGS MPROGS PROGS SCRIPTING TRIGMENU TRIGEDIT TRIGS TRIGEDITOR TRIGGEREDIT TRIGGER-EDIT TRIGGERS DG-SCRIPTS TRIG-HELP SCRIPTS MOBPROGS MPROGS PROGS SCRIPTING TRIGMENU
@ -5502,12 +5471,7 @@ male PC 'Rumble' IDNum: [ 3531], In room [ 0]
See also: REMOTE, RDELETE See also: REMOTE, RDELETE
#31 #31
ASSEMBLIES ASSEMBLE ASSEMBLY VEHICLES MAKE BAKE BREW CRAFT FLETCH KNIT MIX THATCH WEAVE ASSEDIT FORGE TRIG-QUESTS TRIGEDIT-QUESTS AUTOQUEST QUESTS QUESTPOINTS QUEST-POINTS QUESTMASTERS QUEST-MOBS QUESTMOBS QEDIT TRIG_EXAMPLES
See: @RTRIG-EXAMPLES@n
#31
TRIG-QUESTS TRIGEDIT-QUESTS AUTOQUEST QUESTS QUESTPOINTS QUEST-POINTS QUESTMASTERS TRIG-EXAMPLES TRIGEDIT-EXAMPLES QUEST-MOBS QUESTMOBS QEDIT TRIG_EXAMPLES
Many zones have their own quests and examples within them, such as: Many zones have their own quests and examples within them, such as:
@ -5516,7 +5480,7 @@ Assembly Examples: @RTSTAT 38, 48, 335, GOTO 366@n
Questshop Example: @RTSTAT 167, GOTO 265@n Questshop Example: @RTSTAT 167, GOTO 265@n
Fizban's Questshop Example: @RTSTAT 57705-57707@n Fizban's Questshop Example: @RTSTAT 57705-57707@n
See Also Examples: BOATS, PORTALS, GUNS, ASSASSINS See Also Examples: TRIG-EXAMPLES, BOATS, PORTALS, GUNS, ASSASSINS
#31 #31
CANBESEEN %CANBESEEN% %ACTOR.CANBESEEN% CANBESEEN %CANBESEEN% %ACTOR.CANBESEEN%
@ -6886,7 +6850,7 @@ $S his/her target of staff/wand/scroll/potion
PROPER USAGE: @RVSTAT OBJ 350@n PROPER USAGE: @RVSTAT OBJ 350@n
#31 #31
OEDIT-TYPES OBJECT-TYPES OBJ-TYPES OBJ-WEAPONS TRASH OEDIT-TYPES OBJECT-TYPES OBJ-TYPES OBJ-WEAPONS TRASH FURNITURE COUCH CHAIRS
5) Type : @cUNDEFINED@n 5) Type : @cUNDEFINED@n
This specifies what type an object is defined as; also controls the meanings This specifies what type an object is defined as; also controls the meanings
@ -6916,6 +6880,7 @@ of value0 through value4 (option C). The Type Flag must be one of the following:
21 PEN Item is a pen. 21 PEN Item is a pen.
22 BOAT Item is a boat; allows you to traverse water (noswim). 22 BOAT Item is a boat; allows you to traverse water (noswim).
23 FOUNTAIN Item is a fountain. 23 FOUNTAIN Item is a fountain.
24 CHAIR Item is a chair people can sit in.
Good items should be very rare, and hard to get. Lousy items should require Good items should be very rare, and hard to get. Lousy items should require
much less effort. Give the most powerful items actually to a mob; Thieves and much less effort. Give the most powerful items actually to a mob; Thieves and
@ -7718,13 +7683,14 @@ about being a newbie here.
#31 #31
ALIAS-EXAMPLES ALIAS-EXAMPLES
To set up aliases to use older CircleMUD building commands: To set up aliases to use older tbaMUD building commands:
alias poofin set self poofin $* alias poofin set self poofin $*
alias poofout set self poofout $* alias poofout set self poofout $*
alias poofs score alias poofs score
alias cheat return alias cheat return
alias mail at postmaster mail $* alias mail at postmaster mail $*
alias history history all
See also: ALIASES See also: ALIASES
#31 #31
@ -7739,6 +7705,19 @@ head and legs X2.
See also: MEDIT-AC See also: MEDIT-AC
#31 #31
PLIST PLAYERLIST P-LIST PLAYER-LIST
Usage: plist [minlev[-maxlev]] [-n name] [-d days] [-h hours] [-i] [-m]
This command allows immortals to search through the player files using
specific criteria.
Examples:
plist 0 - List everyone level 0.
plist -i -h 2 - List all immortals that have logged in in the past hour.
See Also: LAST
#31
TOGGLES CONFIGURE SETTINGS TOGGLES CONFIGURE SETTINGS
Usage: toggle Usage: toggle
@ -7776,12 +7755,12 @@ See also: AREAS
#0 #0
AREAS ZONES AREAS ZONES
These zones are maintained in the latest CircleMUD format with DG Scripts on These zones are maintained in the latest tbaMUD format with DG Scripts on
The Builder Academy (TBA) telnet://builderacademy.net:9091/ The Builder Academy (TBA) telnet://builderacademy.net:9091/
These areas include all donated areas from TBA, CircleMUD FTP, and stock. TBA These areas include all donated areas from tbaMUD. We are always looking for
is always looking for new submissions or help on improving the current zones. new submissions or help on improving the current zones. Please report any bugs,
Please report any bugs, typos, ideas, or submissions to: typos, ideas, or submissions to:
Rumble Rumble
The Builder Academy The Builder Academy
@ -7988,7 +7967,7 @@ you went idle.
#0 #0
STOCK STOCK
This is a listing of stock areas available with CircleMUD. This is a listing of stock areas.
0 Limbo -- DikuMud 0 Limbo -- DikuMud
9 River Island Of Minos -- Mahatma of HexOynx 9 River Island Of Minos -- Mahatma of HexOynx
@ -8436,16 +8415,13 @@ the body you are wearing the armor. Some items have a special bonus, and
subtract from the AC directly. Negative AC is better. subtract from the AC directly. Negative AC is better.
#0 #0
PASSWORD PW PASSWORDS PW
A secret series of characters that enables a user to access a file, Ideally, your password should be something that nobody could guess. In
computer, or program. On multi-user systems, each user must enter his or her reality, most people choose a password that is easy to remember and they never
password before the computer will respond to commands. The password helps change it. While passwords on most MUDs are encrypted there is no rule that
ensure that unauthorized users do not access the computer. In addition, data they have to be. So please NEVER use a password on a MUD that you use anywhere
files and programs may require a password. Ideally, the password should be else. Choose a separate MUDding password and change it occasionally.
something that nobody could guess. In practice, most people choose a password
that is easy to remember, such as their name or their initials. This is one
reason it is relatively easy to break into most computer systems.
If you forget your password any IMP can reset it for you. If you forget your password any IMP can reset it for you.
#0 #0
@ -8562,14 +8538,15 @@ traveling and require some rest to continue.
See also: MANA, HITPOINTS See also: MANA, HITPOINTS
#0 #0
CIRCLEMUD CREDITS CIRCLEMUD CREDITS
C I R C L E M U D 3 . 5
CircleMUD was developed from DikuMUD (Gamma 0.0) by Jeremy "Ras" Elson at t b a M U D 3 . 5 1
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 tbaMUD (formerly known as 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 tbaMUD is protected under a copyright by the Trustees of
the Johns Hopkins University.
Many, many people contributed to tbaMUD in one way or another throughout
the course of its development. Although it is impossible for me to remember the course of its development. Although it is impossible for me to remember
them all, I'd like to extend special thanks to certain people: them all, I'd like to extend special thanks to certain people:
@ -8594,16 +8571,15 @@ them all, I'd like to extend special thanks to certain people:
...plus everyone else in the Circle community who has submitted material! ...plus everyone else in the Circle community who has submitted material!
Thanks everyone! Thanks everyone!
Anonymous FTP: ftp.circlemud.org or ftp2.circlemud.org in pub/CircleMUD
Bugs and Help: builderacademy.net 9091 Bugs and Help: builderacademy.net 9091
URL: http://www.circlemud.org/ URL: http://tbaMUD.com/
Mailing List: listserv@@post.queensu.ca Mailing List: http://cwg.lazuras.org/
(write "subscribe circle <first name> <last name>")
--Jeremy Elson --Jeremy Elson
CircleMUD is currently being developed by The Builder Academy and all bugs and tbaMUD (formerly known as CircleMUD) is currently being developed by The
requests for help should be directed to: builderacademy.net 9091 Builder Academy. All bugs and requests for help should be directed to:
builderacademy.net 9091
--Rumble --Rumble
#0 #0
@ -9754,11 +9730,10 @@ Accumulative: -
Duration : Instantaneous Duration : Instantaneous
Level : Mage level 6. Level : Mage level 6.
If possible you will know exactly where an object is, or the If possible you will know exactly where an object is, or the name of the person
name of the person using it. If more than one object by the using it. If more than one object by the same name exists, you will get a
same name exists, you will get a listing of several objects. listing of several objects. The maximum number of objects you can
The maximum number of objects you can simultaneously locate is simultaneously locate is your level divided by 2.
your level divided by 2.
#0 #0
MAGIC-MISSILE MAGIC-MISSILE
@ -10011,14 +9986,14 @@ See also: HOUSES
#0 #0
POLICIES INFO NEWS POLICY VERSION UPDATES POLICIES INFO NEWS POLICY VERSION UPDATES
These commands show you important information about CircleMUD. It is a good These commands show you important information about tbaMUD. It is a good
idea to read them every once in a while. idea to read them every once in a while.
info - useful information about the game for beginners info - useful information about the game for beginners
news - latest changes to the code and areas news - latest changes to the code and areas
policy - policies on topics like player killing policy - policies on topics like player killing
credits - the people who made CircleMUD possible! credits - the people who made tbaMUD possible!
version - displays the current CircleMUD version number version - displays the current tbaMUD version number
#0 #0
INVENTORY INVENTORY
@ -10169,7 +10144,7 @@ Usage: notell
Use NO<channel> if you wish to stop using and seeing that channel. A Use NO<channel> if you wish to stop using and seeing that channel. A
(no<channel>) flag will appear after your name in the WHO list. (no<channel>) flag will appear after your name in the WHO list.
See also: TOGGLE, FLAGS, TELL, TOGGLE, WHO See also: TOGGLE, FLAGS, TELL, WHO
#0 #0
OFFER RENTING UNRENTING UN-RENTING OFFER RENTING UNRENTING UN-RENTING
@ -10964,22 +10939,24 @@ you are logged in the MUD or not.
BACKDOOR HACKING BACKDOOR HACKING
Not a good thing to be searching for help on. Your IP address has been logged Not a good thing to be searching for help on. Your IP address has been logged
and we will be contacting your service provider. Just Kidding. CircleMUD is and we will be contacting your service provider. Just Kidding. tbaMUD is
actually very stable. I have never heard of one being hacked except via weak or actually very stable. I have never heard of one being hacked except via weak or
compromised passwords. compromised passwords.
#0 #0
DIKU ROM DBX DBZ SMAUG DIKU ROM DBX DBZ SMAUG
These are other types of MUD codebases. We only focus on the latest version These are other types of MUD codebases. We only focus on tbaMUD (the codebase
of CircleMUD here. formerly known as CircleMUD).
#0 #0
HISTORY HISTORY
Usage: history Usage: history < all | say | gossip | wiznet | tell | shout | grats | holler | auction >
Shows last 100 communications your player has seen while in the game. This command displays what has been said over the channel you input along
Automatically clears after you check it or leave the game. with a time stamp for when it was sent. History all will list the history of
all channels.
See also: CHANNELS See also: CHANNELS
#0 #0
@ -11045,6 +11022,33 @@ Thanks to ...
Share and enjoy. Share and enjoy.
MERC Industries MERC Industries
#0
PROMOTE PROMOTIONS ADVANCEMENTS RAISES LVLS LEVELS GAINS 31 32 33 34 RANKS RANKING HIRING
Here at The Builder Academy the level of an immortal generally denotes
their skill at building. This makes it easier for people to know who is in
charge, who they can ask for help, and who they should be wary of taking tips
from. I encourage everyone to help each other. Just realize that if the person
is not at least level 32 they may have relatively little experience.
Level 31 (Immortal) Anyone who is new to TBA and is working on their trial vnum
or zone.
Level 32 (God) An experienced builder that has proven their knowledge and is
willing to teach others. Level 32 and above is considered staff.
Level 33 (Greater God) An experienced builder that has contributed significantly
to TBA.
Level 34 (Implementor) Welcor and I (Rumble). Welcor codes, I administrate.
Do not bother asking to be advanced, and if that is why you are here, you
are wasting your time. Note, this does not mean you are not a quality builder,
but TBA is not your typical MUD. On the contrary, we are here as dedicated
people to help you learn to build. Because of this the only chance of
advancement is if you are willing to learn to build and then help teach others.
If you are willing to give back to the tbaMUD community, and have the
necessary skills to do so, you will be advanced and given further privileges
to help teach others. Generally, if you have to ask for a promotion you will be
less likely to receive it. Performance is everything here.
#0 #0
HEIACH XTBA HEIACH XTBA
@ -11111,7 +11115,7 @@ feeble essences, where he pretends to not be overly competent and actually
humble and helpful, but whatever you do...don't be fooled! It should be obvious humble and helpful, but whatever you do...don't be fooled! It should be obvious
from the fact he's built 4 rooms in that many years that he is spending most from the fact he's built 4 rooms in that many years that he is spending most
of his time elsewhere...on much darker motives than building happy zones of his time elsewhere...on much darker motives than building happy zones
for CircleMUD players. for tbaMUD players.
#0 #0
PRAISE REVIEWS RATINGS PRAISE REVIEWS RATINGS
@ -11252,7 +11256,7 @@ service-oriented, and non-judgmental about building abilities.
If you wish to participate in any of the above, I believe we uniquely If you wish to participate in any of the above, I believe we uniquely
suit your needs. The only drawback is that while many building suit your needs. The only drawback is that while many building
techniques are universal, we specifically teach the use of CircleMUD techniques are universal, we specifically teach the use of tbaMUD
3.1 with DG-Scripts 1.0.12 and OasisOLC 2.0.6. 3.1 with DG-Scripts 1.0.12 and OasisOLC 2.0.6.
Happy Building! Happy Building!
@ -11280,7 +11284,7 @@ talented, has something to learn. Advice and honest opinions are
given when requested, but at the same time every builder has the given when requested, but at the same time every builder has the
freedom to both experiment with unconventional building techniques, freedom to both experiment with unconventional building techniques,
as well as a chance to learn or get better with traditional as well as a chance to learn or get better with traditional
CircleMUD tools. tbaMUD tools.
This is a place for builders who love to build, and the building This is a place for builders who love to build, and the building
happens in the friendliest atmosphere you could possibly imagine. I happens in the friendliest atmosphere you could possibly imagine. I
@ -11533,29 +11537,40 @@ CHALLENGE
That is what you will find here at TBA. That is what you will find here at TBA.
#0 #0
TBA PROJECT BACKGROUND STORY HISTORY INTRODUCTION ACADEMY COMMUNITY OVERVIEW TBAMUD PROJECT BACKGROUND STORY HISTORY INTRODUCTION ACADEMY COMMUNITY OVERVIEW VISION TBA-VISION
TBA stands for The Builder Academy.
@RGOTO 3@n to enter the Builder Academy tutorial. @RGOTO 3@n to enter the Builder Academy tutorial.
A normal MUD will have a background (theme, plot, story, whatever you want TbaMUD's vision is to provide the MUDding community a stable and functional
to call it) which a builder is expected to work from. TBA does not have codebase that includes an in-depth World and help files that makes it ready
any such background. If you want to build a zone for a MUD then use their to be molded into a custom MUD by its coders and builders. We also provide
background. Otherwise, you may build whatever your heart desires. multiple resources to allow for feedback, contribution, and the sharing of
ideas within the MUDding community to ensure constant development and
improvements.
TBA stands for The Builder Academy. 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.
I created TBA in October of 2000 on Cruel World which was being run by TBA was created in 2000 on Cruel World which was being run by Zemial and Welcor.
Zemial and Welcor. I then began combining my own experience with the work of I began combining my own experience with the work of others into an extensive
others into an extensive tutorial zone, help files, and examples. Welcor and tutorial zone, help files, and examples. Welcor and I ended up separating TBA
I ended up separating TBA from Cruel World to further enhance our training of from Cruel World to further enhance our training of new builders. Welcor has
new builders. Welcor has taken over the development of Trigedit and has taken over the development of Trigedit and has contributed extensively to what
contributed extensively to the current version of Oasis OLC. TBA now has many has now evolved into the tbaMUD release.
purposes. It functions as a test port for Trigedit, Oasis OLC, CircleMUD, and
stock CircleMUD zones. And, of course, we are still open to anyone willing to
learn, teach, or help develop CircleMUD. We have also teamed up with Zizazat
of CWG to combine our efforts.
We are a low stress, no deadline, training environment. Where anyone with 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.
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 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. wish. Numerous people are available to answer questions and give advice.
@ -11620,33 +11635,6 @@ and fill out the application.
See also: OLC, REDIT, MEDIT, OEDIT, ZEDIT, SEDIT, TRIGEDIT, AEDIT See also: OLC, REDIT, MEDIT, OEDIT, ZEDIT, SEDIT, TRIGEDIT, AEDIT
#0
PROMOTE PROMOTIONS ADVANCEMENTS RAISES LVLS LEVELS GAINS 31 32 33 34 RANKS RANKING HIRING
Here at The Builder Academy the level of an immortal generally denotes
their skill at building. This makes it easier for people to know who is in
charge, who they can ask for help, and who they should be wary of taking tips
from. I encourage everyone to help each other. Just realize that if the person
is not at least level 32 they may have relatively little experience.
Level 31 (Immortal) Anyone who is new to TBA and is working on their trial vnum
or zone.
Level 32 (God) An experienced builder that has proven their knowledge and is
willing to teach others. Level 32 and above is considered staff.
Level 33 (Greater God) An experienced builder that has contributed significantly
to TBA.
Level 34 (Implementor) Welcor and I (Rumble). Welcor codes, I administrate.
Do not bother asking to be advanced, and if that is why you are here, you
are wasting your time. Note, this does not mean you are not a quality builder,
but TBA is not your typical MUD. On the contrary, we are here as dedicated
people to help you learn to build. Because of this the only chance of
advancement is if you are willing to learn to build and then help teach others.
If you are willing to give back to the CircleMUD community, and have the
necessary skills to do so, you will be advanced and given further privileges
to help teach others. Generally, if you have to ask for a promotion you will be
less likely to receive it. Performance is everything here.
#0 #0
RANDOM-THOUGHTS BIGGEST EGO RANDOM-THOUGHTS BIGGEST EGO
@ -11661,69 +11649,112 @@ builders to the helpfiles.
@RTSTAT 41095@n @RTSTAT 41095@n
#0 #0
THE-MUD-CONNECTOR TMC MUD-CONNECTOR THE-MUD-CONNECTOR TMC MUD-CONNECTOR MUDCONNECTOR
Most of our traffic comes through word of mouth or TMC reviews. If you are so Most of our traffic comes through word of mouth or TMC reviews. If you are so
inclined please leave a review about your experience with TBA at: inclined please leave a review about your experience with TBA at:
http://mudconnector.com/mud-bin/adv_search.cgi?Mode=MUD&mud=The+Builder+Academy http://mudconnector.com/mud-bin/adv_search.cgi?Mode=MUD&mud=The+Builder+Academy
The most challenging aspect of running a mud is finding good
builders. You will hear this from the admin of every MUD that has ever
been. In the past it has always been up to each individual MUD to find
and usually train their own builders. This works, but I think the
MUDding community can come up with something better. That is why I
created The Builder Academy.
We have been open to anyone interested in learning or teaching how
to build using Oasis OLC with dg scripts since 2000. TBA has expanded
to also be used to develop stock zones for CircleMUD.
TBA has trained 1000's of builders and has an extensive tutorial
and help file system. No pressure, no deadline, just come learn,
teach, or help develop CircleMUD. Give back to the community we have
all taken so much from. TBA is a MUDding resource. Take advantage of
it so we can improve the entire MUDding community.
TBA can also be used by other MUDs as a builder's port. Just send
us your newbie builders. We will teach them and then you can have
them back with the zones they built.
We are always open to anyone willing to learn, teach, or help
develop our newly released tbaMUD codebase (the codebase formerly
known as CircleMUD).
See also: REVIEWS See also: REVIEWS
#0 #0
TBA-ADVERTISING TBA-ADVERTISING
Mud Created: October, 2000
Mud Created: 2000
The Builder Academy The Builder Academy
Code Base: [Circlemud] 3.1 Code Base: [tbaMUD] the latest version
Latest CircleMUD with OasisOLC and DG Scripts Site: builderacademy.net 9091 [88.80.193.39]
Site: builderacademy.net 9091 [206.123.75.138]
Admin Email: rumble@@builderacademy.net Admin Email: rumble@@builderacademy.net
Theme: Teaching Builders, CircleMUD and DG Scripts development Theme: Teaching Builders and tbaMUD codebase development
http://www.builderacademy.net/ http://www.builderacademy.net/
telnet://builderacademy.net:9091 telnet://builderacademy.net:9091
Since 2000 The Builder Academy has been training new builders and
developing the CircleMUD codebase, Oasis OLC, and trigedit. After years
of stock CircleMUD stagnation TBA offered to take over stock CircleMUD
development several times. TBA unofficially released CircleMUD 3.5 in
2006 and later released the codebase under the name tbaMUD. TbaMUD is
holding true to the original CircleMUD vision with a few additions. The
largest difference is the inclusion of Oasis OLC, trigedit, in-depth
tutorials, help files, and examples. TBA will continue development and is
always open to feedback and recommendations from the MUDding community.
TBA is foremost a MUDding resource with the goal of improving the MUDding
community.
The tbaMUD vision:
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.
The source:
http://tbamud.com/Oasis_DG_pages/downloads/patches/tbamud-3.51.tgz
The forums:
http://cwg.lazuras.org/
Rumble
The Builder Academy
builderacademy.net 9091
The most challenging aspect of running a mud is finding good builders. You The most challenging aspect of running a mud is finding good builders. You
will hear this from the admin of every MUD that has ever been. In the past it will hear this from the admin of every MUD that has ever been. In the past it
has always been up to each individual MUD to find and usually train their own has always been up to each individual MUD to find and attempt to train their
builders. This works, but I think the CircleMUD community can come up with own builders. This works, but I think the MUDding community can come up with
something better. That is why I created The Builder Academy. something better. That is why I created The Builder Academy.
We have been open to anyone interested in learning or teaching how to build TBA has been open to anyone interested in learning or teaching how to build
using Oasis OLC with dg scripts since 2000. The current developer of DG scripts, using Oasis OLC with dg scripts since 2000. TBA is now being used to develop
Welcor, uses The Builder's Academy (TBA) as the development port for DG the tbaMUD codebase (formerly known as CircleMUD)
scripts.
Now TBA has expanded to also be used to develop stock zones for CircleMUD.
TBA has trained thousands of builders and has an extensive tutorial and help TBA has trained thousands of builders and has an extensive tutorial and help
file system. No pressure, no deadline, just come learn, teach, or help develop file system. No pressure, no deadline, just come learn, teach, or help develop
CircleMUD. Give back to the community we have all taken so much from. TBA is a tbaMUD. Give back to the community we have all taken so much from. TBA is a
CircleMUD resource. Take advantage of it so we can improve all of CircleMUD. MUDding resource. Please take advantage of it so we can improve all of the
TBA can also be used by other MUDs as a builder's port. Just send us your MUDding community.
TBA can even be used by other MUDs as a builder's port. Just send us your
newbie builders. We will teach them and then you can have them back with the newbie builders. We will teach them and then you can have them back with the
zones they built. zones they built.
We are always open to anyone willing to learn, teach, or help develop stock We are always open to anyone willing to learn, teach, or help develop tbaMUD.
CircleMUD,Oasis OLC, and DG scripts.
TBA has been open to anyone interested in learning or teaching how to
build using Oasis OLC with DG Scripts since 2000. The current developer of
DG scripts and Oasis OLC, Welcor, uses TBA as the development port for both.
TBA is also developing stock and other zones that are free to download.
TBA has trained thousands of builders and has an extensive tutorial and help
file system. No pressure, no deadline, just come learn, teach, or help develop
CircleMUD. Give back to the community we have all taken so much from. TBA is a
CircleMUD resource. Take advantage of it so we can improve all of CircleMUD.
TBA can also be used by other MUDs as a builder's port. Just send us your
newbie builders. We will teach them and then you can have them back with the
zones they built.
We have now opened up a player's port running CWG Buddha to test and develop
zones. We have 177 zones ready for testing and free to download. Check it out
at: builderacademy.net 9092 [65.69.46.147]
Rumble Rumble
The Builder Academy The Builder Academy
builderacademy.net 9091 [206.123.75.138] builderacademy.net 9091 [88.80.193.39]
#0 #0
FAMOUS QUOTES FAMOUS QUOTES
@ -11827,7 +11858,7 @@ administration: builderacademy.net 9091
WELCOR WELCOR
Welcor is the head coder of The Builder Academy and uses TBA to develop Welcor is the head coder of The Builder Academy and uses TBA to develop
Trigedit and OLC for all of CircleMUD. the tbaMUD codebase.
#0 #0
USAGE USAGE
@ -11861,6 +11892,7 @@ http://www.slayn.net/web/
http://www.bylur.net/free/#110 http://www.bylur.net/free/#110
http://xnixhosting.homeunix.org -- Contact Reaplo http://xnixhosting.homeunix.org -- Contact Reaplo
http://www.planetmud.net/ http://www.planetmud.net/
www.evileyehosting.com
#0 #0
THANKSGIVING THANKSGIVING

View file

@ -1,91 +1,92 @@
(lib/text/news)
(lib/text/news)
THE tbaMUD HERALD
"We addict players for their own enjoyment." THE tbaMUD HERALD
February, 2007 "We addict players for their own enjoyment."
February, 2007
NEW COMMANDS AND NEW MUD BEHAVIOR:
--------------------------------- NEW COMMANDS AND NEW MUD BEHAVIOR:
** Over 100 new socials, check them out and feel free to suggest new ones. ---------------------------------
** Over 100 new socials, check them out and feel free to suggest new ones.
** You will now be notified when you have new mail.
** You will now be notified when you have new mail.
** New toggles: autoloot, autogold, autosplit, autosac, and autoassist.
** New toggles: autoloot, autogold, autosplit, autosac, and autoassist.
** Improved toggle command allowing more options.
** Improved toggle command allowing more options.
** You can now use the history command to see the last 100 communications
from all the channels. It clears upon viewing or log off. ** You can now use the history command to see the last 100 communications
from all the channels. It clears upon viewing or log off.
** Your mail will now be saved so you will not lose it when you log off.
** Your mail will now be saved so you will not lose it when you log off.
** You can now use the AFK toggle to let people see you are gone under
who. ** You can now use the AFK toggle to let people see you are gone under
who.
** You now have almost 180 stock zones to play.
** You now have almost 180 stock zones to play.
** You can now interact with rooms, mobs, and objects through triggers.
** You can now interact with rooms, mobs, and objects through triggers.
** Multiple objects will now be stacked and preceeded by a quantity so
your inventory won't be as long. (3) A waybread. ** Multiple objects will now be stacked and preceeded by a quantity so
your inventory won't be as long. (3) A waybread.
** Over 100 new socials, and the gemote command to use socials over the
gossip channel. Socials can now target bodyparts too, behave. ** Over 100 new socials, and the gemote command to use socials over the
gossip channel. Socials can now target bodyparts too, behave.
** You can now use color! @RHELP COLORCODES@n.
** You can now use color! @RHELP COLORCODES@n.
** Added new invisible mobs and objects so everything may not be as it
appears (not even visible with detect invis). ** Added new invisible mobs and objects so everything may not be as it
appears (not even visible with detect invis).
** Added an online dictionary. Tell m-w <word>.
** Added an online dictionary. Tell m-w <word>.
** The player description length has been increased so please write a
decent description for yourself. ** The player description length has been increased so please write a
decent description for yourself.
** You can now set your pagelength with the same command.
** You can now set your pagelength with the same command.
** You can now "look around" to see anything of interest in the room. But,
some things may still be hidden and require further investigation. ** You can now "look around" to see anything of interest in the room. But,
some things may still be hidden and require further investigation.
** You can now use "all" and "all.x" very generally with the get, put,
drop, junk, donate, give, wear and remove commands. Type HELP GET ** You can now use "all" and "all.x" very generally with the get, put,
for more info. drop, junk, donate, give, wear and remove commands. Type HELP GET
for more info.
** The "track" function will show you the first step on the shortest
path to anyone in the game. ** The "track" function will show you the first step on the shortest
path to anyone in the game.
** You can now remove your own messages from the board. Also, if you
put someone else's name in parentheses in the message header, they ** You can now remove your own messages from the board. Also, if you
will be able to remove the message too. put someone else's name in parentheses in the message header, they
will be able to remove the message too.
** The MIDGAARD MAIL SYSTEM is now complete. The Post Office is north
of the entrance to the Grunting Boar inn. Stamps cost 150 coins. ** The MIDGAARD MAIL SYSTEM is now complete. The Post Office is north
of the entrance to the Grunting Boar inn. Stamps cost 150 coins.
** Fountains have now been implemented. You can drink from fountains
or fill containers from fountains using the FILL command. ** Fountains have now been implemented. You can drink from fountains
or fill containers from fountains using the FILL command.
** The SHOUT command, as always, only reaches people in your zone (you
can see who these people are by typing WHERE). The HOLLER command ** The SHOUT command, as always, only reaches people in your zone (you
reaches everyone in the game but costs extra movement points. can see who these people are by typing WHERE). The HOLLER command
reaches everyone in the game but costs extra movement points.
** When you are writing a message, you will now not be interrupted
by tells, shouts, emotes, socials, and even people talking in the ** When you are writing a message, you will now not be interrupted
same room. by tells, shouts, emotes, socials, and even people talking in the
same room.
*****************************************************************************
IF YOU LEAVE THE GAME FOR MORE THAN AN HOUR, either by renting or plain *****************************************************************************
quitting, your hit points, move points, and mana will be fully restored IF YOU LEAVE THE GAME FOR MORE THAN AN HOUR, either by renting or plain
when you come back! This doesn't work if you're poisoned. quitting, your hit points, move points, and mana will be fully restored
***************************************************************************** when you come back! This doesn't work if you're poisoned.
*****************************************************************************
** Use the ASSIST command to engage in mortal combat with someone in the
room who is getting pummeled. ** Use the ASSIST command to engage in mortal combat with someone in the
room who is getting pummeled.
** Use the SPLIT command to split gold among the members of your group
(including yourself) who are in the room. i.e. If you are in a group ** Use the SPLIT command to split gold among the members of your group
with 4 other people who are in the room with you, type "SPLIT 100" (including yourself) who are in the room. i.e. If you are in a group
to give each of them 20 coins. with 4 other people who are in the room with you, type "SPLIT 100"
to give each of them 20 coins.
** You can use the VISIBLE command to break a spell of invisibility before
it expires. ** You can use the VISIBLE command to break a spell of invisibility before
it expires.

View file

@ -8,7 +8,6 @@
#include "conf.h" #include "conf.h"
#include "sysdep.h" #include "sysdep.h"
#include "structs.h" #include "structs.h"
#include "interpreter.h" #include "interpreter.h"
#include "handler.h" #include "handler.h"
@ -34,13 +33,7 @@ void aedit_setup_existing(struct descriptor_data *d, int real_num);
void aedit_save_internally(struct descriptor_data *d); void aedit_save_internally(struct descriptor_data *d);
void aedit_save_to_disk(struct descriptor_data *d); void aedit_save_to_disk(struct descriptor_data *d);
/* /* Utils and exported functions. */
* Utils and exported functions.
*/
/*------------------------------------------------------------------------*\
Utils and exported functions.
\*------------------------------------------------------------------------*/
ACMD(do_oasis_aedit) ACMD(do_oasis_aedit)
{ {
@ -48,7 +41,11 @@ ACMD(do_oasis_aedit)
struct descriptor_data *d; struct descriptor_data *d;
int i; int i;
if (CONFIG_NEW_SOCIALS == 0) { /* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
if (CONFIG_NEW_SOCIALS == 0) {
send_to_char(ch, "Socials cannot be edited at the moment.\r\n"); send_to_char(ch, "Socials cannot be edited at the moment.\r\n");
return; return;
} }
@ -81,9 +78,7 @@ ACMD(do_oasis_aedit)
return; return;
} }
/* /* Give descriptor an OLC structure. */
* Give descriptor an OLC structure.
*/
if (d->olc) { if (d->olc) {
mudlog(BRF, LVL_IMMORT, TRUE, "SYSERR: do_oasis: Player already had olc structure."); mudlog(BRF, LVL_IMMORT, TRUE, "SYSERR: do_oasis: Player already had olc structure.");
free(d->olc); free(d->olc);
@ -115,7 +110,6 @@ ACMD(do_oasis_aedit)
mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing actions.", GET_NAME(ch)); mudlog(CMP, LVL_IMMORT, TRUE, "OLC: %s starts editing actions.", GET_NAME(ch));
} }
void aedit_setup_new(struct descriptor_data *d) { void aedit_setup_new(struct descriptor_data *d) {
CREATE(OLC_ACTION(d), struct social_messg, 1); CREATE(OLC_ACTION(d), struct social_messg, 1);
OLC_ACTION(d)->command = strdup(OLC_STORAGE(d)); OLC_ACTION(d)->command = strdup(OLC_STORAGE(d));
@ -141,8 +135,6 @@ void aedit_setup_new(struct descriptor_data *d) {
OLC_VAL(d) = 0; OLC_VAL(d) = 0;
} }
/*------------------------------------------------------------------------*/
void aedit_setup_existing(struct descriptor_data *d, int real_num) { void aedit_setup_existing(struct descriptor_data *d, int real_num) {
CREATE(OLC_ACTION(d), struct social_messg, 1); CREATE(OLC_ACTION(d), struct social_messg, 1);
OLC_ACTION(d)->command = strdup(soc_mess_list[real_num].command); OLC_ACTION(d)->command = strdup(soc_mess_list[real_num].command);
@ -181,8 +173,6 @@ void aedit_setup_existing(struct descriptor_data *d, int real_num) {
aedit_disp_menu(d); aedit_disp_menu(d);
} }
void aedit_save_internally(struct descriptor_data *d) { void aedit_save_internally(struct descriptor_data *d) {
struct social_messg *new_soc_mess_list = NULL; struct social_messg *new_soc_mess_list = NULL;
int i; int i;
@ -212,9 +202,6 @@ void aedit_save_internally(struct descriptor_data *d) {
aedit_save_to_disk(d); /* autosave by Rumble */ aedit_save_to_disk(d); /* autosave by Rumble */
} }
/*------------------------------------------------------------------------*/
void aedit_save_to_disk(struct descriptor_data *d) { void aedit_save_to_disk(struct descriptor_data *d) {
FILE *fp; FILE *fp;
int i; int i;
@ -257,11 +244,7 @@ void aedit_save_to_disk(struct descriptor_data *d) {
remove_from_save_list(AEDIT_PERMISSION, SL_ACTION); remove_from_save_list(AEDIT_PERMISSION, SL_ACTION);
} }
/*------------------------------------------------------------------------*/ /* The Main Menu. */
/* Menu functions */
/* the main menu */
void aedit_disp_menu(struct descriptor_data * d) { void aedit_disp_menu(struct descriptor_data * d) {
struct social_messg *action = OLC_ACTION(d); struct social_messg *action = OLC_ACTION(d);
struct char_data *ch = d->character; struct char_data *ch = d->character;
@ -332,10 +315,7 @@ void aedit_disp_menu(struct descriptor_data * d) {
} }
/* /* The main loop. */
* The main loop
*/
void aedit_parse(struct descriptor_data * d, char *arg) { void aedit_parse(struct descriptor_data * d, char *arg) {
int i; int i;

View file

@ -41,6 +41,10 @@ ACMD(do_oasis_cedit)
struct descriptor_data *d; struct descriptor_data *d;
char buf1[MAX_STRING_LENGTH]; char buf1[MAX_STRING_LENGTH];
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
/* Parse any arguments. */ /* Parse any arguments. */
one_argument(argument, buf1); one_argument(argument, buf1);

View file

@ -44,6 +44,10 @@ ACMD(do_oasis_trigedit)
int number, real_num; int number, real_num;
struct descriptor_data *d; struct descriptor_data *d;
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
/* Parse any arguments. */ /* Parse any arguments. */
skip_spaces(&argument); skip_spaces(&argument);
if (!*argument || !isdigit(*argument)) { if (!*argument || !isdigit(*argument)) {

View file

@ -361,9 +361,9 @@ int delete_object(obj_rnum rnum)
struct obj_data *obj, *tmp; struct obj_data *obj, *tmp;
int shop, j; int shop, j;
if (rnum == NOWHERE || rnum > top_of_objt) if (rnum == NOTHING || rnum > top_of_objt)
return FALSE; return NOTHING;
obj = &obj_proto[rnum]; obj = &obj_proto[rnum];
zone_rnum zrnum = real_zone_by_thing(GET_OBJ_VNUM(obj)); zone_rnum zrnum = real_zone_by_thing(GET_OBJ_VNUM(obj));
@ -457,5 +457,5 @@ int delete_object(obj_rnum rnum)
save_objects(zrnum); save_objects(zrnum);
return TRUE; return rnum;
} }

View file

@ -9,7 +9,6 @@
#include "conf.h" #include "conf.h"
#include "sysdep.h" #include "sysdep.h"
#include "structs.h" #include "structs.h"
#include "utils.h" #include "utils.h"
#include "db.h" #include "db.h"
@ -204,12 +203,8 @@ int in_save_list(zone_vnum zone, int type)
return FALSE; return FALSE;
} }
/* -------------------------------------------------------------------------- */ /* Used from do_show(), ideally. */
ACMD(do_show_save_list)
/*
* Used from do_show(), ideally.
*/
void do_show_save_list(struct char_data *ch)
{ {
if (save_list == NULL) if (save_list == NULL)
send_to_char(ch, "All world files are up to date.\r\n"); send_to_char(ch, "All world files are up to date.\r\n");

View file

@ -6,18 +6,14 @@
************************************************************************/ ************************************************************************/
#define STRING_TERMINATOR '~' #define STRING_TERMINATOR '~'
#define CONFIG_GENOLC_MOBPROG 0 #define CONFIG_GENOLC_MOBPROG 0
/* from modify.c */ void smash_tilde(char *str); /* from modify.c */
void smash_tilde(char *str);
int genolc_checkstring(struct descriptor_data *d, char *arg); int genolc_checkstring(struct descriptor_data *d, char *arg);
int remove_from_save_list(zone_vnum, int type); int remove_from_save_list(zone_vnum, int type);
int add_to_save_list(zone_vnum, int type); int add_to_save_list(zone_vnum, int type);
int in_save_list(zone_vnum, int type); int in_save_list(zone_vnum, int type);
void strip_cr(char *); void strip_cr(char *);
void do_show_save_list(struct char_data *);
int save_all(void); int save_all(void);
char *str_udup(const char *); char *str_udup(const char *);
void copy_ex_descriptions(struct extra_descr_data **to, struct extra_descr_data *from); void copy_ex_descriptions(struct extra_descr_data **to, struct extra_descr_data *from);

View file

@ -111,6 +111,10 @@ ACMD(do_oasis_hedit)
struct descriptor_data *d; struct descriptor_data *d;
int i; int i;
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
if (!can_edit_zone(ch, HEDIT_PERMISSION)) { if (!can_edit_zone(ch, HEDIT_PERMISSION)) {
send_to_char(ch, "You don't have access to editing help files.\r\n"); send_to_char(ch, "You don't have access to editing help files.\r\n");
return; return;

View file

@ -183,6 +183,7 @@ ACMD(do_score);
ACMD(do_send); ACMD(do_send);
ACMD(do_set); ACMD(do_set);
ACMD(do_show); ACMD(do_show);
ACMD(do_show_save_list);
ACMD(do_shutdown); ACMD(do_shutdown);
ACMD(do_sit); ACMD(do_sit);
ACMD(do_skillset); ACMD(do_skillset);
@ -250,7 +251,7 @@ cpp_extern const struct command_info cmd_info[] = {
/* now, the main list */ /* now, the main list */
{ "at" , "at" , POS_DEAD , do_at , LVL_IMMORT, 0 }, { "at" , "at" , POS_DEAD , do_at , LVL_IMMORT, 0 },
{ "advance" , "adv" , POS_DEAD , do_advance , LVL_GOD, 0 }, { "advance" , "adv" , POS_DEAD , do_advance , LVL_GOD, 0 },
{ "aedit" , "aed" , POS_DEAD , do_oasis , LVL_GOD, SCMD_OASIS_AEDIT }, { "aedit" , "aed" , POS_DEAD , do_oasis_aedit, LVL_GOD, 0 },
{ "alias" , "ali" , POS_DEAD , do_alias , 0, 0 }, { "alias" , "ali" , POS_DEAD , do_alias , 0, 0 },
{ "afk" , "afk" , POS_DEAD , do_gen_tog , 0, SCMD_AFK }, { "afk" , "afk" , POS_DEAD , do_gen_tog , 0, SCMD_AFK },
{ "assist" , "as" , POS_FIGHTING, do_assist , 1, 0 }, { "assist" , "as" , POS_FIGHTING, do_assist , 1, 0 },
@ -270,7 +271,7 @@ cpp_extern const struct command_info cmd_info[] = {
{ "bug" , "bug" , POS_DEAD , do_gen_write, 0, SCMD_BUG }, { "bug" , "bug" , POS_DEAD , do_gen_write, 0, SCMD_BUG },
{ "cast" , "c" , POS_SITTING , do_cast , 1, 0 }, { "cast" , "c" , POS_SITTING , do_cast , 1, 0 },
{ "cedit" , "cedit" , POS_DEAD , do_oasis , LVL_IMPL, SCMD_OASIS_CEDIT }, { "cedit" , "cedit" , POS_DEAD , do_oasis_cedit, LVL_IMPL, 0 },
{ "changelog", "cha" , POS_DEAD , do_changelog, LVL_IMPL, 0 }, { "changelog", "cha" , POS_DEAD , do_changelog, LVL_IMPL, 0 },
{ "check" , "ch" , POS_STANDING, do_not_here , 1, 0 }, { "check" , "ch" , POS_STANDING, do_not_here , 1, 0 },
{ "checkload", "checkl" , POS_DEAD , do_checkloadstatus, LVL_GOD, 0 }, { "checkload", "checkl" , POS_DEAD , do_checkloadstatus, LVL_GOD, 0 },
@ -326,7 +327,7 @@ cpp_extern const struct command_info cmd_info[] = {
{ "gtell" , "gt" , POS_SLEEPING, do_gsay , 0, 0 }, { "gtell" , "gt" , POS_SLEEPING, do_gsay , 0, 0 },
{ "help" , "h" , POS_DEAD , do_help , 0, 0 }, { "help" , "h" , POS_DEAD , do_help , 0, 0 },
{ "hedit" , "hedit" , POS_DEAD , do_oasis , LVL_GOD , SCMD_OASIS_HEDIT }, { "hedit" , "hedit" , POS_DEAD , do_oasis_hedit, LVL_GOD , 0 },
{ "hindex" , "hind" , POS_DEAD , do_hindex , 0, 0 }, { "hindex" , "hind" , POS_DEAD , do_hindex , 0, 0 },
{ "helpcheck", "helpch" , POS_DEAD , do_helpcheck, LVL_IMPL, 0 }, { "helpcheck", "helpch" , POS_DEAD , do_helpcheck, LVL_IMPL, 0 },
{ "hide" , "hi" , POS_RESTING , do_hide , 1, 0 }, { "hide" , "hi" , POS_RESTING , do_hide , 1, 0 },
@ -362,8 +363,8 @@ cpp_extern const struct command_info cmd_info[] = {
{ "motd" , "motd" , POS_DEAD , do_gen_ps , 0, SCMD_MOTD }, { "motd" , "motd" , POS_DEAD , do_gen_ps , 0, SCMD_MOTD },
{ "mail" , "mail" , POS_STANDING, do_not_here , 1, 0 }, { "mail" , "mail" , POS_STANDING, do_not_here , 1, 0 },
{ "medit" , "med" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_MEDIT }, { "medit" , "med" , POS_DEAD , do_oasis_medit, LVL_BUILDER, 0 },
{ "mlist" , "mlist" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_MLIST }, { "mlist" , "mlist" , POS_DEAD , do_oasis_list , LVL_BUILDER, SCMD_OASIS_MLIST },
{ "mute" , "mute" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_SQUELCH }, { "mute" , "mute" , POS_DEAD , do_wizutil , LVL_GOD, SCMD_SQUELCH },
{ "news" , "news" , POS_SLEEPING, do_gen_ps , 0, SCMD_NEWS }, { "news" , "news" , POS_SLEEPING, do_gen_ps , 0, SCMD_NEWS },
@ -381,9 +382,9 @@ cpp_extern const struct command_info cmd_info[] = {
{ "open" , "o" , POS_SITTING , do_gen_door , 0, SCMD_OPEN }, { "open" , "o" , POS_SITTING , do_gen_door , 0, SCMD_OPEN },
{ "order" , "ord" , POS_RESTING , do_order , 1, 0 }, { "order" , "ord" , POS_RESTING , do_order , 1, 0 },
{ "offer" , "off" , POS_STANDING, do_not_here , 1, 0 }, { "offer" , "off" , POS_STANDING, do_not_here , 1, 0 },
{ "olc" , "olc" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OLC_SAVEINFO }, { "olc" , "olc" , POS_DEAD , do_show_save_list, LVL_BUILDER, 0 },
{ "olist" , "olist" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_OLIST }, { "olist" , "olist" , POS_DEAD , do_oasis_list, LVL_BUILDER, SCMD_OASIS_OLIST },
{ "oedit" , "oedit" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_OEDIT }, { "oedit" , "oedit" , POS_DEAD , do_oasis_oedit, LVL_BUILDER, 0 },
{ "put" , "p" , POS_RESTING , do_put , 0, 0 }, { "put" , "p" , POS_RESTING , do_put , 0, 0 },
{ "peace" , "pe" , POS_DEAD , do_peace , LVL_BUILDER, 0 }, { "peace" , "pe" , POS_DEAD , do_peace , LVL_BUILDER, 0 },
@ -417,8 +418,8 @@ cpp_extern const struct command_info cmd_info[] = {
{ "rescue" , "resc" , POS_FIGHTING, do_rescue , 1, 0 }, { "rescue" , "resc" , POS_FIGHTING, do_rescue , 1, 0 },
{ "restore" , "resto" , POS_DEAD , do_restore , LVL_GOD, 0 }, { "restore" , "resto" , POS_DEAD , do_restore , LVL_GOD, 0 },
{ "return" , "retu" , POS_DEAD , do_return , 0, 0 }, { "return" , "retu" , POS_DEAD , do_return , 0, 0 },
{ "redit" , "redit" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_REDIT }, { "redit" , "redit" , POS_DEAD , do_oasis_redit, LVL_BUILDER, 0 },
{ "rlist" , "rlist" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_RLIST }, { "rlist" , "rlist" , POS_DEAD , do_oasis_list, LVL_BUILDER, SCMD_OASIS_RLIST },
{ "rclone" , "rclone" , POS_DEAD , do_room_copy, LVL_BUILDER, 0 }, { "rclone" , "rclone" , POS_DEAD , do_room_copy, LVL_BUILDER, 0 },
{ "roomflags", "roomflags", POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_SHOWVNUMS }, { "roomflags", "roomflags", POS_DEAD , do_gen_tog , LVL_IMMORT, SCMD_SHOWVNUMS },
@ -429,7 +430,7 @@ cpp_extern const struct command_info cmd_info[] = {
{ "save" , "sav" , POS_SLEEPING, do_save , 0, 0 }, { "save" , "sav" , POS_SLEEPING, do_save , 0, 0 },
{ "saveall" , "saveall" , POS_DEAD , do_saveall , LVL_BUILDER, 0}, { "saveall" , "saveall" , POS_DEAD , do_saveall , LVL_BUILDER, 0},
{ "sell" , "sell" , POS_STANDING, do_not_here , 0, 0 }, { "sell" , "sell" , POS_STANDING, do_not_here , 0, 0 },
{ "sedit" , "sedit" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_SEDIT }, { "sedit" , "sedit" , POS_DEAD , do_oasis_sedit, LVL_BUILDER, 0 },
{ "send" , "send" , POS_SLEEPING, do_send , LVL_GOD, 0 }, { "send" , "send" , POS_SLEEPING, do_send , LVL_GOD, 0 },
{ "set" , "set" , POS_DEAD , do_set , LVL_IMMORT, 0 }, { "set" , "set" , POS_DEAD , do_set , LVL_IMMORT, 0 },
{ "shout" , "sho" , POS_RESTING , do_gen_comm , 0, SCMD_SHOUT }, { "shout" , "sho" , POS_RESTING , do_gen_comm , 0, SCMD_SHOUT },
@ -439,7 +440,7 @@ cpp_extern const struct command_info cmd_info[] = {
{ "sip" , "sip" , POS_RESTING , do_drink , 0, SCMD_SIP }, { "sip" , "sip" , POS_RESTING , do_drink , 0, SCMD_SIP },
{ "skillset" , "skillset", POS_SLEEPING, do_skillset , LVL_GRGOD, 0 }, { "skillset" , "skillset", POS_SLEEPING, do_skillset , LVL_GRGOD, 0 },
{ "sleep" , "sl" , POS_SLEEPING, do_sleep , 0, 0 }, { "sleep" , "sl" , POS_SLEEPING, do_sleep , 0, 0 },
{ "slist" , "slist" , POS_SLEEPING, do_oasis , LVL_BUILDER, SCMD_OASIS_SLIST }, { "slist" , "slist" , POS_SLEEPING, do_oasis_list, LVL_BUILDER, SCMD_OASIS_SLIST },
{ "sneak" , "sneak" , POS_STANDING, do_sneak , 1, 0 }, { "sneak" , "sneak" , POS_STANDING, do_sneak , 1, 0 },
{ "snoop" , "snoop" , POS_DEAD , do_snoop , LVL_GOD, 0 }, { "snoop" , "snoop" , POS_DEAD , do_snoop , LVL_GOD, 0 },
{ "socials" , "socials" , POS_DEAD , do_commands , 0, SCMD_SOCIALS }, { "socials" , "socials" , POS_DEAD , do_commands , 0, SCMD_SOCIALS },
@ -460,9 +461,9 @@ cpp_extern const struct command_info cmd_info[] = {
{ "toggle" , "toggle" , POS_DEAD , do_toggle , 0, 0 }, { "toggle" , "toggle" , POS_DEAD , do_toggle , 0, 0 },
{ "track" , "track" , POS_STANDING, do_track , 0, 0 }, { "track" , "track" , POS_STANDING, do_track , 0, 0 },
{ "transfer" , "transfer", POS_SLEEPING, do_trans , LVL_GOD, 0 }, { "transfer" , "transfer", POS_SLEEPING, do_trans , LVL_GOD, 0 },
{ "trigedit" , "trigedit", POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_TRIGEDIT}, { "trigedit" , "trigedit", POS_DEAD , do_oasis_trigedit, LVL_BUILDER, 0 },
{ "typo" , "typo" , POS_DEAD , do_gen_write, 0, SCMD_TYPO }, { "typo" , "typo" , POS_DEAD , do_gen_write, 0, SCMD_TYPO },
{ "tlist" , "tlist" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_TLIST }, { "tlist" , "tlist" , POS_DEAD , do_oasis_list, LVL_BUILDER, SCMD_OASIS_TLIST },
{ "tstat" , "tstat" , POS_DEAD , do_tstat , LVL_BUILDER, 0 }, { "tstat" , "tstat" , POS_DEAD , do_tstat , LVL_BUILDER, 0 },
{ "unlock" , "unlock" , POS_SITTING , do_gen_door , 0, SCMD_UNLOCK }, { "unlock" , "unlock" , POS_SITTING , do_gen_door , 0, SCMD_UNLOCK },
@ -497,8 +498,8 @@ cpp_extern const struct command_info cmd_info[] = {
{ "write" , "write" , POS_STANDING, do_write , 1, 0 }, { "write" , "write" , POS_STANDING, do_write , 1, 0 },
{ "zreset" , "zreset" , POS_DEAD , do_zreset , LVL_BUILDER, 0 }, { "zreset" , "zreset" , POS_DEAD , do_zreset , LVL_BUILDER, 0 },
{ "zedit" , "zedit" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_ZEDIT }, { "zedit" , "zedit" , POS_DEAD , do_oasis_zedit, LVL_BUILDER, 0 },
{ "zlist" , "zlist" , POS_DEAD , do_oasis , LVL_BUILDER, SCMD_OASIS_ZLIST }, { "zlist" , "zlist" , POS_DEAD , do_oasis_list, LVL_BUILDER, SCMD_OASIS_ZLIST },
{ "zcheck" , "zcheck" , POS_DEAD , do_zcheck , LVL_GOD, 0 }, { "zcheck" , "zcheck" , POS_DEAD , do_zcheck , LVL_GOD, 0 },
{ "zpurge" , "zpurge" , POS_DEAD , do_zpurge , LVL_BUILDER, 0 }, { "zpurge" , "zpurge" , POS_DEAD , do_zpurge , LVL_BUILDER, 0 },

View file

@ -212,24 +212,13 @@ struct alias_data {
#define SCMD_LOCK 3 #define SCMD_LOCK 3
#define SCMD_PICK 4 #define SCMD_PICK 4
/* do_olc */ /* do_oasis_Xlist */
#define SCMD_OASIS_REDIT 0 #define SCMD_OASIS_RLIST 0
#define SCMD_OASIS_OEDIT 1 #define SCMD_OASIS_MLIST 1
#define SCMD_OASIS_ZEDIT 2 #define SCMD_OASIS_OLIST 2
#define SCMD_OASIS_MEDIT 3 #define SCMD_OASIS_SLIST 3
#define SCMD_OASIS_SEDIT 4 #define SCMD_OASIS_ZLIST 4
#define SCMD_OASIS_CEDIT 5 #define SCMD_OASIS_TLIST 5
#define SCMD_OLC_SAVEINFO 7
#define SCMD_OASIS_RLIST 8
#define SCMD_OASIS_MLIST 9
#define SCMD_OASIS_OLIST 10
#define SCMD_OASIS_SLIST 11
#define SCMD_OASIS_ZLIST 12
#define SCMD_OASIS_TRIGEDIT 13
#define SCMD_OASIS_AEDIT 14
#define SCMD_OASIS_TLIST 15
#define SCMD_OASIS_LINKS 16
#define SCMD_OASIS_HEDIT 17
/* do_last */ /* do_last */
#define SCMD_LIST_ALL 1 #define SCMD_LIST_ALL 1

View file

@ -49,6 +49,10 @@ ACMD(do_oasis_medit)
char buf1[MAX_STRING_LENGTH]; char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH];
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
/* Parse any arguments */ /* Parse any arguments */
buf3 = two_arguments(argument, buf1, buf2); buf3 = two_arguments(argument, buf1, buf2);
@ -763,7 +767,7 @@ void medit_parse(struct descriptor_data *d, char *arg)
case MEDIT_DELETE: case MEDIT_DELETE:
if (*arg == 'y' || *arg == 'Y') { if (*arg == 'y' || *arg == 'Y') {
if (delete_mobile(GET_MOB_RNUM(OLC_MOB(d)))) if (delete_mobile(GET_MOB_RNUM(OLC_MOB(d))) != NOBODY)
write_to_output(d, "Mobile deleted.\r\n"); write_to_output(d, "Mobile deleted.\r\n");
else else
write_to_output(d, "Couldn't delete the mobile!\r\n"); write_to_output(d, "Couldn't delete the mobile!\r\n");

View file

@ -7,7 +7,6 @@
#include "conf.h" #include "conf.h"
#include "sysdep.h" #include "sysdep.h"
#include "structs.h" #include "structs.h"
#include "utils.h" #include "utils.h"
#include "interpreter.h" #include "interpreter.h"
@ -24,15 +23,10 @@
#include "screen.h" #include "screen.h"
#include "dg_olc.h" #include "dg_olc.h"
/* External Functions */
/******************************************************************************/
/** External Functions **/
/******************************************************************************/
int is_name(const char *str, const char *namelist); int is_name(const char *str, const char *namelist);
/******************************************************************************/ /* Internal Data Structures */
/** Internal Data Structures **/
/******************************************************************************/
struct olc_scmd_info_t { struct olc_scmd_info_t {
const char *text; const char *text;
int con_type; int con_type;
@ -51,131 +45,20 @@ struct olc_scmd_info_t {
const char *nrm, *grn, *cyn, *yel; const char *nrm, *grn, *cyn, *yel;
/******************************************************************************/ /* Internal Functions */
/** Internal Functions **/
/******************************************************************************/
void free_config(struct config_data *data); void free_config(struct config_data *data);
/* -------------------------------------------------------------------------- */ /* Only player characters should be using OLC anyway. */
/*
* Only player characters should be using OLC anyway.
*/
void clear_screen(struct descriptor_data *d) void clear_screen(struct descriptor_data *d)
{ {
if (PRF_FLAGGED(d->character, PRF_CLS)) if (PRF_FLAGGED(d->character, PRF_CLS))
write_to_output(d, ""); write_to_output(d, "");
} }
/* -------------------------------------------------------------------------- */ /* Exported utilities */
/* Set the color string pointers for that which this char will see at color
/* * level NRM. Changing the entries here will change the colour scheme
* Exported ACMD do_oasis function. * throughout the OLC. */
*
* This function is the OLC interface. It deals with all the
* generic OLC stuff, then passes control to the sub-olc sections.
*
* UPDATE:
* I believe that yes, putting the code together that is common in all of the
* olc functions is good to a certain extent, but the do_oasis command was
* getting ridiculous. Therefore, I have separated them into separate
* functions that get called from in do_oasis....yes, similar code, but it is
* easier to handle.... - Kip Potter
*/
ACMD(do_oasis)
{
/*
* No screwing around as a mobile.
*/
if (IS_NPC(ch) || !ch->desc)
return;
/*
* Prevent forcing people in OLC to edit other stuff.
* 'force' just lets command_interpreter() handle the input,
* regardless of the state of the victim.
* This can wreck havoc if people are i OLC already
* - ie. their input would have been redirected by nanny(), and
* never get to command_interpreter().
* -- Welcor 09/03
* - thanks to Mark Garringer (zizazat@hotmail.com) for the bug report.
*/
if (STATE(ch->desc) != CON_PLAYING)
return;
switch (subcmd) {
/*
* The command to see what needs to be saved, typically 'olc'.
*/
case SCMD_OLC_SAVEINFO:
do_show_save_list(ch);
break;
case SCMD_OASIS_CEDIT:
do_oasis_cedit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_ZEDIT:
do_oasis_zedit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_REDIT:
do_oasis_redit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_OEDIT:
do_oasis_oedit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_MEDIT:
do_oasis_medit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_SEDIT:
do_oasis_sedit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_RLIST:
case SCMD_OASIS_MLIST:
case SCMD_OASIS_OLIST:
case SCMD_OASIS_SLIST:
case SCMD_OASIS_ZLIST:
case SCMD_OASIS_TLIST:
do_oasis_list(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_LINKS:
do_oasis_links(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_TRIGEDIT:
do_oasis_trigedit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_AEDIT:
do_oasis_aedit(ch, argument, cmd, subcmd);
break;
case SCMD_OASIS_HEDIT:
do_oasis_hedit(ch, argument, cmd, subcmd);
break;
default:
log("SYSERR: (OLC) Invalid subcmd passed to do_oasis, subcmd - (%d)", subcmd);
return;
}
return;
}
/*------------------------------------------------------------*\
Exported utilities
\*------------------------------------------------------------*/
/*
* Set the colour string pointers for that which this char will
* see at color level NRM. Changing the entries here will change
* the colour scheme throughout the OLC.
*/
void get_char_colors(struct char_data *ch) void get_char_colors(struct char_data *ch)
{ {
nrm = CCNRM(ch, C_NRM); nrm = CCNRM(ch, C_NRM);
@ -184,23 +67,16 @@ void get_char_colors(struct char_data *ch)
yel = CCYEL(ch, C_NRM); yel = CCYEL(ch, C_NRM);
} }
/* /* This procedure frees up the strings and/or the structures attatched to a
* This procedure frees up the strings and/or the structures * descriptor, sets all flags back to how they should be. */
* attatched to a descriptor, sets all flags back to how they
* should be.
*/
void cleanup_olc(struct descriptor_data *d, byte cleanup_type) void cleanup_olc(struct descriptor_data *d, byte cleanup_type)
{ {
/* /* Clean up WHAT? */
* Clean up WHAT?
*/
if (d->olc == NULL) if (d->olc == NULL)
return; return;
/* /* Check for a room. free_room doesn't perform sanity checks, we must be
* Check for a room. free_room doesn't perform * careful here. */
* sanity checks, we must be careful here.
*/
if (OLC_ROOM(d)) { if (OLC_ROOM(d)) {
switch (cleanup_type) { switch (cleanup_type) {
case CLEANUP_ALL: case CLEANUP_ALL:
@ -220,38 +96,28 @@ void cleanup_olc(struct descriptor_data *d, byte cleanup_type)
} }
} }
/* /* Check for an existing object in the OLC. The strings aren't part of the
* Check for an existing object in the OLC. The strings * prototype any longer. They get added with strdup(). */
* aren't part of the prototype any longer. They get added
* with strdup().
*/
if (OLC_OBJ(d)) { if (OLC_OBJ(d)) {
free_object_strings(OLC_OBJ(d)); free_object_strings(OLC_OBJ(d));
free(OLC_OBJ(d)); free(OLC_OBJ(d));
} }
/* /* Check for a mob. free_mobile() makes sure strings are not in the
* Check for a mob. free_mobile() makes sure strings are not in * prototype. */
* the prototype.
*/
if (OLC_MOB(d)) if (OLC_MOB(d))
free_mobile(OLC_MOB(d)); free_mobile(OLC_MOB(d));
/* /* Check for a zone. cleanup_type is irrelevant here, free() everything. */
* Check for a zone. cleanup_type is irrelevant here, free() everything.
*/
if (OLC_ZONE(d)) { if (OLC_ZONE(d)) {
free(OLC_ZONE(d)->name); free(OLC_ZONE(d)->name);
free(OLC_ZONE(d)->cmd); free(OLC_ZONE(d)->cmd);
free(OLC_ZONE(d)); free(OLC_ZONE(d));
} }
/* /* Check for a shop. free_shop doesn't perform sanity checks, we must be
* Check for a shop. free_shop doesn't perform sanity checks, we must * careful here. OLC_SHOP(d) is a _copy_ - no pointers to the original. Just
* be careful here. * go ahead and free it all. */
* OLC_SHOP(d) is a _copy_ - no pointers to the original. Just go ahead
* and free it all.
*/
if (OLC_SHOP(d)) if (OLC_SHOP(d))
free_shop(OLC_SHOP(d)); free_shop(OLC_SHOP(d));
@ -284,33 +150,23 @@ void cleanup_olc(struct descriptor_data *d, byte cleanup_type)
} }
} }
/* free storage if allocated (for tedit and aedit) */ /* Free storage if allocated (tedit, aedit, and trigedit). This is the command
/* and Triggers */ * list - it's been copied to disk already, so just free it -Welcor. */
/*
* this is the command list - it's been copied to disk already,
* so just free it -- Welcor
*/
if (OLC_STORAGE(d)) { if (OLC_STORAGE(d)) {
free(OLC_STORAGE(d)); free(OLC_STORAGE(d));
OLC_STORAGE(d) = NULL; OLC_STORAGE(d) = NULL;
} }
/* /* Free this one regardless. If we've left olc, we've either made a fresh
* Free this one regardless. If we've left olc, we've either made * copy of it in the trig index, or we lost connection. Either way, we need
* a fresh copy of it in the trig index, or we lost connection. * to get rid of this. */
* Either way, we need to get rid of this.
*/
if (OLC_TRIG(d)) { if (OLC_TRIG(d)) {
free_trigger(OLC_TRIG(d)); free_trigger(OLC_TRIG(d));
OLC_TRIG(d) = NULL; OLC_TRIG(d) = NULL;
} }
/* /* OLC_SCRIPT is always set as trig_proto of OLC_OBJ/MOB/ROOM. Therefore it
* OLC_SCRIPT is always set as trig_proto of OLC_OBJ/MOB/ROOM. * should not be free'd here. */
* Therefore it should not be free'd here.
*/
/* /* Restore descriptor playing status. */
* Restore descriptor playing status.
*/
if (d->character) { if (d->character) {
REMOVE_BIT(PLR_FLAGS(d->character), PLR_WRITING); REMOVE_BIT(PLR_FLAGS(d->character), PLR_WRITING);
act("$n stops using OLC.", TRUE, d->character, NULL, NULL, TO_ROOM); act("$n stops using OLC.", TRUE, d->character, NULL, NULL, TO_ROOM);
@ -331,10 +187,8 @@ void cleanup_olc(struct descriptor_data *d, byte cleanup_type)
d->olc = NULL; d->olc = NULL;
} }
/* /* This function is an exact duplicate of the tag_argument function found in
* This function is an exact duplicate of the tag_argument function found in * one of the ascii patches located on the circlemud ftp website. */
* one of the ascii patches located on the circlemud ftp website.
*/
void split_argument(char *argument, char *tag) void split_argument(char *argument, char *tag)
{ {
char *tmp = argument, *ttag = tag, *wrt = argument; char *tmp = argument, *ttag = tag, *wrt = argument;
@ -360,34 +214,17 @@ void split_argument(char *argument, char *tag)
void free_config(struct config_data *data) void free_config(struct config_data *data)
{ {
/****************************************************************************/ /* Free strings. */
/** Free strings. **/
/****************************************************************************/
free_strings(data, OASIS_CFG); free_strings(data, OASIS_CFG);
/****************************************************************************/ /* Free the data structure. */
/** Free the data structure. **/
/****************************************************************************/
free(data); free(data);
} }
/******************************************************************************/ /* Checks to see if a builder can modify the specified zone. Ch is the imm
/** **/ * requesting access to modify this zone. Rnum is the real number of the zone
/** Function : can_edit_zone() **/ * attempted to be modified. Returns TRUE if the builder has access, otherwisei
/** **/ * FALSE. */
/** Description : Checks to see if a builder can modify the specified **/
/** zone. **/
/** **/
/** Arguments : **/
/** ch **/
/** The character requesting access to modify this zone. **/
/** rnum **/
/** The real number of the zone attempted to be modified. **/
/** **/
/** Returns : Returns TRUE if the builder has access, otherwise **/
/** FALSE. **/
/** **/
/******************************************************************************/
int can_edit_zone(struct char_data *ch, zone_rnum rnum) int can_edit_zone(struct char_data *ch, zone_rnum rnum)
{ {
/* no access if called with bad arguments */ /* no access if called with bad arguments */

View file

@ -346,7 +346,7 @@ int Crash_clean_file(char *name)
return FALSE; return FALSE;
/* Open so that permission problems will be flagged now, at boot time. */ /* Open so that permission problems will be flagged now, at boot time. */
if (!(fl = fopen(fname, "rw"))) { if (!(fl = fopen(fname, "r"))) {
if (errno != ENOENT) /* if it fails, NOT because of no file */ if (errno != ENOENT) /* if it fails, NOT because of no file */
log("SYSERR: OPENING OBJECT FILE %s (4): %s", fname, strerror(errno)); log("SYSERR: OPENING OBJECT FILE %s (4): %s", fname, strerror(errno));
return FALSE; return FALSE;

View file

@ -62,6 +62,10 @@ ACMD(do_oasis_oedit)
char buf1[MAX_STRING_LENGTH]; char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH];
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
/* Parse any arguments. */ /* Parse any arguments. */
buf3 = two_arguments(argument, buf1, buf2); buf3 = two_arguments(argument, buf1, buf2);
@ -1175,7 +1179,7 @@ void oedit_parse(struct descriptor_data *d, char *arg)
break; break;
case OEDIT_DELETE: case OEDIT_DELETE:
if (*arg == 'y' || *arg == 'Y') { if (*arg == 'y' || *arg == 'Y') {
if (delete_object(GET_OBJ_RNUM(OLC_OBJ(d)))) if (delete_object(GET_OBJ_RNUM(OLC_OBJ(d))) != NOTHING)
write_to_output(d, "Object deleted.\r\n"); write_to_output(d, "Object deleted.\r\n");
else else
write_to_output(d, "Couldn't delete the object!\r\n"); write_to_output(d, "Couldn't delete the object!\r\n");

View file

@ -40,6 +40,10 @@ ACMD(do_oasis_redit)
int number = NOWHERE, save = 0, real_num; int number = NOWHERE, save = 0, real_num;
struct descriptor_data *d; struct descriptor_data *d;
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
/* Parse any arguments. */ /* Parse any arguments. */
buf3 = two_arguments(argument, buf1, buf2); buf3 = two_arguments(argument, buf1, buf2);

View file

@ -60,6 +60,10 @@ ACMD(do_oasis_sedit)
char buf1[MAX_INPUT_LENGTH]; char buf1[MAX_INPUT_LENGTH];
char buf2[MAX_INPUT_LENGTH]; char buf2[MAX_INPUT_LENGTH];
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
/* Parse any arguments. */ /* Parse any arguments. */
buf3 = two_arguments(argument, buf1, buf2); buf3 = two_arguments(argument, buf1, buf2);

View file

@ -10,13 +10,11 @@
#include "conf.h" #include "conf.h"
#include "sysdep.h" #include "sysdep.h"
#include "structs.h" #include "structs.h"
#include "db.h" #include "db.h"
#include "interpreter.h" #include "interpreter.h"
#include "utils.h" #include "utils.h"
/* external globals */ /* external globals */
extern int mini_mud; extern int mini_mud;
@ -41,7 +39,6 @@ void ASSIGNMOB(mob_vnum mob, SPECIAL(fname));
void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname)); void ASSIGNOBJ(obj_vnum obj, SPECIAL(fname));
/* functions to perform assignments */ /* functions to perform assignments */
void ASSIGNMOB(mob_vnum mob, SPECIAL(fname)) void ASSIGNMOB(mob_vnum mob, SPECIAL(fname))
{ {
mob_rnum rnum; mob_rnum rnum;
@ -72,11 +69,7 @@ void ASSIGNROOM(room_vnum room, SPECIAL(fname))
log("SYSERR: Attempt to assign spec to non-existant room #%d", room); log("SYSERR: Attempt to assign spec to non-existant room #%d", room);
} }
/* Assignments */
/* ********************************************************************
* Assignments *
******************************************************************** */
/* assign special procedures to mobiles */ /* assign special procedures to mobiles */
void assign_mobiles(void) void assign_mobiles(void)
{ {

View file

@ -10,7 +10,6 @@
#include "conf.h" #include "conf.h"
#include "sysdep.h" #include "sysdep.h"
#include "structs.h" #include "structs.h"
#include "utils.h" #include "utils.h"
#include "comm.h" #include "comm.h"
@ -39,23 +38,10 @@ void list_skills(struct char_data *ch);
SPECIAL(guild); SPECIAL(guild);
SPECIAL(dump); SPECIAL(dump);
SPECIAL(mayor); SPECIAL(mayor);
void npc_steal(struct char_data *ch, struct char_data *victim);
SPECIAL(snake);
SPECIAL(thief);
SPECIAL(magic_user);
SPECIAL(guild_guard);
SPECIAL(puff);
SPECIAL(fido);
SPECIAL(janitor);
SPECIAL(cityguard);
SPECIAL(pet_shops); SPECIAL(pet_shops);
SPECIAL(bank); SPECIAL(bank);
/* Special procedures for mobiles */
/* ********************************************************************
* Special procedures for mobiles *
******************************************************************** */
int spell_sort_info[MAX_SKILLS + 1]; int spell_sort_info[MAX_SKILLS + 1];
int compare_spells(const void *x, const void *y) int compare_spells(const void *x, const void *y)
@ -145,7 +131,6 @@ void list_skills(struct char_data *ch)
page_string(ch->desc, buf2, TRUE); page_string(ch->desc, buf2, TRUE);
} }
SPECIAL(guild) SPECIAL(guild)
{ {
int skill_num, percent; int skill_num, percent;
@ -189,8 +174,6 @@ SPECIAL(guild)
return (TRUE); return (TRUE);
} }
SPECIAL(dump) SPECIAL(dump)
{ {
struct obj_data *k; struct obj_data *k;
@ -224,7 +207,6 @@ SPECIAL(dump)
return (TRUE); return (TRUE);
} }
SPECIAL(mayor) SPECIAL(mayor)
{ {
char actbuf[MAX_INPUT_LENGTH]; char actbuf[MAX_INPUT_LENGTH];
@ -318,324 +300,7 @@ SPECIAL(mayor)
return (FALSE); return (FALSE);
} }
/* ********************************************************************
* General special procedures for mobiles *
******************************************************************** */
void npc_steal(struct char_data *ch, struct char_data *victim)
{
int gold;
if (IS_NPC(victim))
return;
if (GET_LEVEL(victim) >= LVL_IMMORT)
return;
if (!CAN_SEE(ch, victim))
return;
if (AWAKE(victim) && (rand_number(0, GET_LEVEL(ch)) == 0)) {
act("You discover that $n has $s hands in your wallet.", FALSE, ch, 0, victim, TO_VICT);
act("$n tries to steal gold from $N.", TRUE, ch, 0, victim, TO_NOTVICT);
} else {
/* Steal some gold coins */
gold = (GET_GOLD(victim) * rand_number(1, 10)) / 100;
if (gold > 0) {
GET_GOLD(ch) += gold;
GET_GOLD(victim) -= gold;
}
}
}
/*
* Quite lethal to low-level characters.
*/
SPECIAL(snake)
{
if (cmd || GET_POS(ch) != POS_FIGHTING || !FIGHTING(ch))
return (FALSE);
if (IN_ROOM(FIGHTING(ch)) != IN_ROOM(ch) || rand_number(0, GET_LEVEL(ch)) != 0)
return (FALSE);
act("$n bites $N!", 1, ch, 0, FIGHTING(ch), TO_NOTVICT);
act("$n bites you!", 1, ch, 0, FIGHTING(ch), TO_VICT);
call_magic(ch, FIGHTING(ch), 0, SPELL_POISON, GET_LEVEL(ch), CAST_SPELL);
return (TRUE);
}
SPECIAL(thief)
{
struct char_data *cons;
if (cmd || GET_POS(ch) != POS_STANDING)
return (FALSE);
for (cons = world[IN_ROOM(ch)].people; cons; cons = cons->next_in_room)
if (!IS_NPC(cons) && GET_LEVEL(cons) < LVL_IMMORT && !rand_number(0, 4)) {
npc_steal(ch, cons);
return (TRUE);
}
return (FALSE);
}
SPECIAL(magic_user)
{
struct char_data *vict;
if (cmd || GET_POS(ch) != POS_FIGHTING)
return (FALSE);
/* pseudo-randomly choose someone in the room who is fighting me */
for (vict = world[IN_ROOM(ch)].people; vict; vict = vict->next_in_room)
if (FIGHTING(vict) == ch && !rand_number(0, 4))
break;
/* if I didn't pick any of those, then just slam the guy I'm fighting */
if (vict == NULL && IN_ROOM(FIGHTING(ch)) == IN_ROOM(ch))
vict = FIGHTING(ch);
/* Hm...didn't pick anyone...I'll wait a round. */
if (vict == NULL)
return (TRUE);
if (GET_LEVEL(ch) > 13 && rand_number(0, 10) == 0)
cast_spell(ch, vict, NULL, SPELL_POISON);
if (GET_LEVEL(ch) > 7 && rand_number(0, 8) == 0)
cast_spell(ch, vict, NULL, SPELL_BLINDNESS);
if (GET_LEVEL(ch) > 12 && rand_number(0, 12) == 0) {
if (IS_EVIL(ch))
cast_spell(ch, vict, NULL, SPELL_ENERGY_DRAIN);
else if (IS_GOOD(ch))
cast_spell(ch, vict, NULL, SPELL_DISPEL_EVIL);
}
if (rand_number(0, 4))
return (TRUE);
switch (GET_LEVEL(ch)) {
case 4:
case 5:
cast_spell(ch, vict, NULL, SPELL_MAGIC_MISSILE);
break;
case 6:
case 7:
cast_spell(ch, vict, NULL, SPELL_CHILL_TOUCH);
break;
case 8:
case 9:
cast_spell(ch, vict, NULL, SPELL_BURNING_HANDS);
break;
case 10:
case 11:
cast_spell(ch, vict, NULL, SPELL_SHOCKING_GRASP);
break;
case 12:
case 13:
cast_spell(ch, vict, NULL, SPELL_LIGHTNING_BOLT);
break;
case 14:
case 15:
case 16:
case 17:
cast_spell(ch, vict, NULL, SPELL_COLOR_SPRAY);
break;
default:
cast_spell(ch, vict, NULL, SPELL_FIREBALL);
break;
}
return (TRUE);
}
/* ********************************************************************
* Special procedures for mobiles *
******************************************************************** */
SPECIAL(guild_guard)
{
int i;
struct char_data *guard = (struct char_data *)me;
const char *buf = "The guard humiliates you, and blocks your way.\r\n";
const char *buf2 = "The guard humiliates $n, and blocks $s way.";
if (!IS_MOVE(cmd) || AFF_FLAGGED(guard, AFF_BLIND))
return (FALSE);
if (GET_LEVEL(ch) >= LVL_IMMORT)
return (FALSE);
for (i = 0; guild_info[i].guild_room != NOWHERE; i++) {
/* Wrong guild or not trying to enter. */
if (GET_ROOM_VNUM(IN_ROOM(ch)) != guild_info[i].guild_room || cmd != guild_info[i].direction)
continue;
/* Allow the people of the guild through. */
if (!IS_NPC(ch) && GET_CLASS(ch) == guild_info[i].pc_class)
continue;
send_to_char(ch, "%s", buf);
act(buf2, FALSE, ch, 0, 0, TO_ROOM);
return (TRUE);
}
return (FALSE);
}
SPECIAL(puff)
{
char actbuf[MAX_INPUT_LENGTH];
if (cmd)
return (FALSE);
switch (rand_number(0, 60)) {
case 0:
do_say(ch, strcpy(actbuf, "My god! It's full of stars!"), 0, 0); /* strcpy: OK */
return (TRUE);
case 1:
do_say(ch, strcpy(actbuf, "How'd all those fish get up here?"), 0, 0); /* strcpy: OK */
return (TRUE);
case 2:
do_say(ch, strcpy(actbuf, "I'm a very female dragon."), 0, 0); /* strcpy: OK */
return (TRUE);
case 3:
do_say(ch, strcpy(actbuf, "I've got a peaceful, easy feeling."), 0, 0); /* strcpy: OK */
return (TRUE);
default:
return (FALSE);
}
}
SPECIAL(fido)
{
struct obj_data *i, *temp, *next_obj;
if (cmd || !AWAKE(ch))
return (FALSE);
for (i = world[IN_ROOM(ch)].contents; i; i = i->next_content) {
if (!IS_CORPSE(i))
continue;
act("$n savagely devours a corpse.", FALSE, ch, 0, 0, TO_ROOM);
for (temp = i->contains; temp; temp = next_obj) {
next_obj = temp->next_content;
obj_from_obj(temp);
obj_to_room(temp, IN_ROOM(ch));
}
extract_obj(i);
return (TRUE);
}
return (FALSE);
}
SPECIAL(janitor)
{
struct obj_data *i;
if (cmd || !AWAKE(ch))
return (FALSE);
for (i = world[IN_ROOM(ch)].contents; i; i = i->next_content) {
if (!CAN_WEAR(i, ITEM_WEAR_TAKE))
continue;
if (GET_OBJ_TYPE(i) != ITEM_DRINKCON && GET_OBJ_COST(i) >= 15)
continue;
act("$n picks up some trash.", FALSE, ch, 0, 0, TO_ROOM);
obj_from_room(i);
obj_to_char(i, ch);
return (TRUE);
}
return (FALSE);
}
SPECIAL(cityguard)
{
struct char_data *tch, *evil, *spittle;
int max_evil, min_cha;
if (cmd || !AWAKE(ch) || FIGHTING(ch))
return (FALSE);
max_evil = 1000;
min_cha = 6;
spittle = evil = NULL;
for (tch = world[IN_ROOM(ch)].people; tch; tch = tch->next_in_room) {
if (!CAN_SEE(ch, tch))
continue;
if (!IS_NPC(tch) && PLR_FLAGGED(tch, PLR_KILLER)) {
act("$n screams 'HEY!!! You're one of those PLAYER KILLERS!!!!!!'", FALSE, ch, 0, 0, TO_ROOM);
hit(ch, tch, TYPE_UNDEFINED);
return (TRUE);
}
if (!IS_NPC(tch) && PLR_FLAGGED(tch, PLR_THIEF)) {
act("$n screams 'HEY!!! You're one of those PLAYER THIEVES!!!!!!'", FALSE, ch, 0, 0, TO_ROOM);
hit(ch, tch, TYPE_UNDEFINED);
return (TRUE);
}
if (FIGHTING(tch) && GET_ALIGNMENT(tch) < max_evil && (IS_NPC(tch) || IS_NPC(FIGHTING(tch)))) {
max_evil = GET_ALIGNMENT(tch);
evil = tch;
}
if (GET_CHA(tch) < min_cha) {
spittle = tch;
min_cha = GET_CHA(tch);
}
}
if (evil && GET_ALIGNMENT(FIGHTING(evil)) >= 0) {
act("$n screams 'PROTECT THE INNOCENT! BANZAI! CHARGE! ARARARAGGGHH!'", FALSE, ch, 0, 0, TO_ROOM);
hit(ch, evil, TYPE_UNDEFINED);
return (TRUE);
}
/* Reward the socially inept. */
if (spittle && !rand_number(0, 9)) {
static int spit_social;
if (!spit_social)
spit_social = find_command("spit");
if (spit_social > 0) {
char spitbuf[MAX_NAME_LENGTH + 1];
strncpy(spitbuf, GET_NAME(spittle), sizeof(spitbuf)); /* strncpy: OK */
spitbuf[sizeof(spitbuf) - 1] = '\0';
do_action(ch, spitbuf, spit_social, 0);
return (TRUE);
}
}
return (FALSE);
}
#define PET_PRICE(pet) (GET_LEVEL(pet) * 300) #define PET_PRICE(pet) (GET_LEVEL(pet) * 300)
SPECIAL(pet_shops) SPECIAL(pet_shops)
{ {
char buf[MAX_STRING_LENGTH], pet_name[256]; char buf[MAX_STRING_LENGTH], pet_name[256];
@ -699,13 +364,7 @@ SPECIAL(pet_shops)
return (FALSE); return (FALSE);
} }
/* Special procedures for objects */
/* ********************************************************************
* Special procedures for objects *
******************************************************************** */
SPECIAL(bank) SPECIAL(bank)
{ {
int amount; int amount;

View file

@ -42,6 +42,10 @@ ACMD(do_oasis_zedit)
char buf1[MAX_STRING_LENGTH]; char buf1[MAX_STRING_LENGTH];
char buf2[MAX_STRING_LENGTH]; char buf2[MAX_STRING_LENGTH];
/* No building as a mob or while being forced. */
if (IS_NPC(ch) || !ch->desc || STATE(ch->desc) != CON_PLAYING)
return;
/* Parse any arguments. */ /* Parse any arguments. */
buf3 = two_arguments(argument, buf1, buf2); buf3 = two_arguments(argument, buf1, buf2);
@ -670,7 +674,7 @@ void zedit_parse(struct descriptor_data *d, char *arg)
case 'q': case 'q':
case 'Q': case 'Q':
if (OLC_ZONE(d)->age || OLC_ZONE(d)->number) { if (OLC_ZONE(d)->age || OLC_ZONE(d)->number) {
write_to_output(d, "Do you wish to save your changes? (y/n) : "); write_to_output(d, "Do you wish to save your changes? : ");
OLC_MODE(d) = ZEDIT_CONFIRM_SAVESTRING; OLC_MODE(d) = ZEDIT_CONFIRM_SAVESTRING;
} else { } else {
write_to_output(d, "No changes made.\r\n"); write_to_output(d, "No changes made.\r\n");