Dead Souls Admin FAQ

Written by Cratylus @ Dead Souls, October 2005
Updated May 2008

Note: commands are displayed in boldface, like this: ls -a

What's this FAQ about?


The point of this document is to orient a new admin in
Dead Souls 2. Starting a MUD with a lib thatn is completely new to
you can be confusing and discouraging. Hopefully this FAQ will
make the experience less difficult.


0 How do I start?

1 Is there a MUD somewhere running Dead Souls I can log into?

2 I like Dead Souls and I want to use it, but I don't want to run a mud.

3 I want to invite my friends to help me code. How do I promote
them to creator status?

4 What about intermud? How do I talk on that?

5 I talk on intermud but nobody replies. What's up with that?

6 How did you know my mud started up?

7 I heard there's an I3 router included in Dead Souls.

8 What's this about a manual on Frontiers?

9 How do I add limbs to a race?

10 How do I add a race?

11 How do I make my friend an admin?

12 I don't like how the who command output looks! You should change it.

13 Can you please make the FAQ easier to read? It's too long and complicated.

14 Most of the file headers have only Descartes's name on them.
Did you really develop this lib or did he?

15 How can I change the colors of the channel messages?

16 How do I know what other muds use Dead Souls?

17 I was hanging out in the Arch room and the loudspeaker went off. WTF?

18 I want to test the intermud channel but I don't want to spam the ds line.

19 What's this "Network room"?

20 The web server and FTP server don't work

21 I tried to log in to the FTP server but I can't!

22 I can't do anything with FTP. It just hangs there.

23 The web server gives me a 404 but I know the directory is there.

24 I'm using an external FTP server, but the files I transfer
become read only!

25 I moved a command from one directory to another. How do I
get the new location recognized?

26 The mudtime is all wrong!

27 The time of day is all wrong!

28 What happened to the roommaker and thingmaker?

29 I keep getting 'Connection to address server (localhost 9999) refused.'

30 Can I charge players a fee for playing on my mud?

31 Can people donate money to me for the mud?

32 I found a bug. For real. Can you please fix it?

33 Where would I edit to change how long someone can be idle
before they get disconnected?

34 How do I permit all users who log in to become
creators automatically?

35 How do I limit the use of intermud channels?

36 How do I get off intermud completely?

37 How do I change the start room for the mud?

38 I don't like having newbies get special treatment.

39 I don't want players to be able to pick non-human races.

40 I want everyone to speak the same language.

41 I made a change to /lib/player.c and updated it, but I'm not
seeing a difference in my character.

42 How do I change the items new players receive?

43 Hey, there's no <foo> class! What's up with that?

44 Where can I get a Dead Souls mud hosted?

45 Your LIB_MXLPLX system is all screwy. I changed it and it
works. Wanna see?

46 How are files organized in Dead Souls?

47 What are sefuns and efuns?

48 Whew! Ok now I know where stuff is. What's next?

49 Oh, man, you're kidding! Those are, like, books! Can't I
just start making stuff?

50 Everything is su-u-u-u-p-e-e-r-r-r s-s-l-o-o-o-o-w-w-w

51 Dude! One of my creators just kicked me off my own mud!

52 Is Dead Souls secure?

53 I sent you my code a week ago. Is it in or out?

54 Did you finish the bfd() sefun modification I asked you for last night?

55 QUEEG_D is a horrendous mess. It's inefficient and frankly offensive.

56 You implemented my code but didn't give me credit.

57 Intermud mail doesn't work

58 The admintool menus let you pick options that aren't visible

59 What does locking the mud do, exactly?

60 The race help output is inadequate for role-playing. How do I change it?

61 I need to know what features to expect in the next release so
I don't waste time duplicating effort

62 You need a development roadmap and task tracking

63 How do I update a sefun without rebooting the mud?

64 My new sefun updates but I can't seem to use it.

65 What's the point of the apostrophe-stripping for args in lib/command.c?

66 How does one achieve 'high mortal' or 'ambassador' positions?

67 I would like XYZ and PDQ to happen every time the mud boots

68 I can't login! I keep getting: "It seems some work is being done
right now, try later."

69 I had a really great idea that revolutionizes ds and you refuse
to include it. I am forking ds development and making my dream come true.

70 What do the version numbers mean?

71 The Dead Souls router is down.

72 I'm going to totally revamp <insert highly complex system here>.
Will that be difficult?


73 I've hired an area coder to make a new domain. I want her
to be able to use QCS in /domains/MistyDragonShireMysts.


74 How does player voting work?

75 What are "estates"?

76 What are "events"?

77 Where does user monitor data go?

78 How would you set a race to be selectable by new players?

79 Where is emote data kept?

80 What are .h and .o files? Where are they kept?

81 But my friend forgot his password! I *have* to edit his playerfile!

82 How do I change my mud's name?

83 Help! I locked myself out!

84 What are the privileges associated with the groups in groups.cfg?


85 Why does the documentation refer to LIB_ARMOUR and armour_types.h?

86 Where are read/write restrictions kept?

87 I need to test day/night descriptions, but I can't wait around all day.

88 How can I change the default prompt? Can I make it dynamic?

89 What is "unguarded"?

90 Is intermud communication secure?

91 What are some do's and don'ts?

92 Is DS2 in any way suited to create a non-english mud from/with it?

93 I keep losing my intermud connection, and sometimes I'm half connected


94 I heard I can run my old TMI-2/Nightmare 3/Skylib/Lima code on Dead Souls. Is that true?

95 Why is the version of Dead Souls 2 on Sourceforge different from the one on dead-souls.net?

96 Good heavens! All I wanted to do was change combat, and it is so complicated!

97 Editing in Windows is fine and call_out()'s are great. Your advice sucks!

98 I keep hearing that Dead Souls can do this or that, but I'm trying and can't.

99 You appear to have a FAQ for everything!

100 If I XYZ, will that work?

102 Hey you skipped question 101!

103
You are not taking my bug report very seriously.

104
Dude. Just answer my question. It's just one question, ffs.

105 Is it possible to upgrade to alpha without killing everything I've done?

106 How do I start an area?

107 I don't want to use a cookie-cutter codebase

108 How do I make my new area the default domain where new people to arrive?

109 I heard passive mode on the FTP server works now.

110 I boot the mud but nothing happens...the startup headers
come up but nothing preloads and I get no error messages. What's
going on?


111 How do I add a default alias?

112 How do reset() and clean_up() work?

113 When do reset() and clean_up() happen?

114 I want a 100% PK mud. Setting rooms PK one by one is not acceptable.

115 How do I make a new skill?

116 Why was Descartes so lame?

117 The mud is locked whats the command to add someone to the allow list?

118 Shouldn't you change all the documentation to reflect the move to FluffOS?

119 How do I change my timezone?

120 So I herd u liek mudkip

121 Where is all the player information stored?

122 The addrace command complains that the race already exists.

123 I am confused about the player/creator distinction.

124 How do I prevent people from using channels?

125 How do i disable the rss bot, or other channels?

126 I made a verb but it doesn't work.

127 Does Dead Souls support databases like MYSQL?


128 How do I make my new currency work?

129 My friends can't connect to my mud, but I can!

130 My efun override is not working

131 How do I remove the QCS?

132 I heard you can edit stuff from the interwebs?

133 I want to let people build but I don't want them to be full creators

134 How do I enable IMC2? What is it?

135 Combat is too slow!

136 I want players to select their class when they create their characters


How do I start?

The first thing to do is follow the installation FAQ
to get Dead Souls installed. Then log in, and start reading
the administrator's guide, by typing these commands:

read index in guide

read chapter 1 in guide

read chapter 2 in guide

etc.

You should also become familiar with the Creator FAQ, in
particular the section on getting questions answered.


Is there a MUD somewhere running Dead Souls I can log into?

As a convenience to the curious, I have set up a "demo" mud
at alcatraz.wolfpaw.net, port 8000. To connect, either click on
this link with your browser, or open a terminal window
(or for windows users, Start -> Run ) and
type: telnet
alcatraz.wolfpaw.net 8000 , or use the java applet
at this page: http://dead-souls.net/javaclient/demo.html

When you log in, the system will ask you whether you'd
like to be a player or creator. You'll want to choose "creator"
so that you can examine code, try out the QCS, etc.

Please note that in the regular, non-demo version of the
mud, people are NOT automatically given that choice.

On the regular non-demo version of the mud, Only
the admin (basically, the first person to log on to the new mud)
gets automatic creatorship by default.

After logging in, you will be transported
to your workroom. Some useful commands:

look
look at me
look at chest
open chest
look in chest
get tricorder from chest
read index in handbook
read chapter 1 in handbook
who
stat
wiz
create new npc generic
look at board
read 1 on board
home


I like Dead Souls and I want to use it, but I don't want to run a mud.

Being a mud admin is very different from being just a coder
or builder, and many people just don't feel like dealing with
the hassle of running a mud.
There are a few Dead Souls muds out there that could
use help from you. Telnet to the Dead Souls development mud
and type: mudlist -m Dead to see a list of Dead Souls muds
that might be hiring.
You can also just code on the Dead Souls development
mud. You're welcome to create as you please, and if your
building gets to the point where you'd like it included in
the lib, let me know and I'll inspect it for approval.

Please note that starting January 2007, for any of your code to become
part of the official Dead Souls distribution, you must officially
disclaim copyright to it and place it into public domain.


I want to invite my friends to help me code. How do I
promote them to creator status?

encre dude

To demote them:

decre dude


What about intermud? How do I talk on that?

The intermud3 (or i3) network is available
to you, and you are probably already connected to it. Type
mudlist to see a list of other muds on the network.

By default, the "Dead Souls intermud channel" is
enabled for creators. Type: ds blah blah
and other Dead Souls muds on the i3 network will see
your message like this:

You@YourMud <ds> blah blah

Please note that intercre is where you ask coding
and technical questions only. Random chatting is not
tolerated on that channel. Newbie questions that are
Dead Souls specific or that obviously have answers in
Dead Souls documentation may meet a hostile reception on
intercre.

Conversely, dchat is mostly chat.

Note: If you decide to add the intergossip channel to
yourself or your creators, be aware that conversations
there tend sometimes not to be PG-rated. You can
also find yourself baited into a flamebattle if
you're not careful. I protect newbies as I can, but
it helps if you can prevent yourself from being baited.
Really I'd suggest you avoid the intergossip channel
entirely.

The lpuni channel is a mix of chat and official LPUniversity
business. The LPUniversity project has been dead as of
November 2006, though, so the channel's existence is likely
to be a matter of historical, and not practical, relevance.

The ds channel is for Dead Souls-related conversation. Sometimes
the topic drifts, but "random chat" should be avoided
there. Use dchat for off-topic chat. If you don't already
hace dchat enabled, type: call me->AddChannel("dchat")


I talk on intermud but nobody replies. What's up with that?

If you haven't changed your MUD's name from the
stock default (ie if your mud name is DeadSoulsWin
or DeadSoulsNew) then your mud may be conflicting with
someone else's new mud that is already connected to
intermud. Change your mud's name and see if this helps.

Another possible cause is network problems.
I3 uses a hub topology. All muds communicating on intermud
connect to the router to do so. If that router is down all
i3 communication stops, until it comes back up. To check
network status, ping Frontiers or Dead Souls. If the
ping command gets no answer, i3 is probably down, or
your connection to it has been interrupted. Your mud will
be aware of this and retry to connect to i3 every
fifteen minutes or so.

There's also the possibility that nobody who wants to
chat is listening.

It's also possible that the Dead Souls I3 router has
changed address or port. Visit this page to get the
latest connection info:

Dead Souls I3 Router Page


Under some unusual circumstances, the router might
be misbehaving. If that happens, post a question on
the lpmuds intermud topic: http://lpmuds.net/forum/

Please make sure you post on the Intermud topic.

It may also be that you have been earmuffed by
other people, because you've annoyed them. You
can avoid this by becoming familiar with the
proper way to find answers.


How did you know my mud started up?

The same way your mud knows that i3 is up or
down. A while ago I noticed that i3 can be very
unreliable, and sometimes when it goes down and
comes back up, people's muds don't refresh their
connection, and they can be off intermud for days
without realizing it.

I implemented a "keepalive" system which
uses the intermud "auth" packets as pings. Every
five minutes or so, your mud tries to ping Frontiers,
Dead Souls, and itself. If it gets a reply from at
least one, then it's happy. If neither reply, then your
mud alerts the Arch room that intermud is down, and it
will reload the intermud daemon every 15 minutes
in an attempt to reconnect. Once i3 is back up and
you are reconnected, you go back to pinging.

This means that Frontiers and Dead Souls
get a bunch of pings all the time. When a mud we've
never heard of before pings us, we get a message
about it, and so we know a new mud is online.

If this makes you feel like Big Brother
is watching you, you can edit "PINGING_MUDS" in
/secure/include/config.h to have the name of
your own mud only, so you just ping yourself.

You can also disable your intermud connection with the command:

mudconfig intermud disable


I heard there's an I3 router included in Dead Souls.

Please see the router page for details.


What's this about a manual on Frontiers?

It's no longer relevant. All the docs
we were making available on Frontiers are now included
in Dead Souls, starting from version 1.9r9.

In your workroom is a chest. Open the
chest and the new Dead Souls Creators Manual is
inside. The text files are in /doc/manual .


How do I add limbs to a race?

Edit /secure/cfg/races/<race> and make the changes
you want. Then use removerace to remove the race from the
races daemon, then add re-add the race with addrace .


How do I add a race?

Copy a race in
/secure/cfg/races/ and edit it.
For example:

cp
/secure/cfg/races/bear /secure/cfg/races/wampa

Edit the wampa file to reflect what you think a
wampa is like. If you want new players to be able
to select wampa as their race, make sure the file
has this line in it:

PLAYER_RACE 1

Make especially sure to change the lines RACE and
LANGUAGE. When you're done editing, type:

addrace wampa


For details:
help addrace

Note that the race file PLAYER_RACE line overrides
the options used in the addrace command.

NOTE: It is possible to remove all races. However, please
read the following discussion to get an idea of the issues
involved:

[2006.11.20-18.08] Ohm@ashdev <dead_souls> Hey, if the removeraces command will screw up something, will removing the races manually from admintool have the same effect?
[2006.11.20-18.08] Cratylus@Dead Souls Demo <dead_souls> ok let's take this one step at a time
[2006.11.20-18.09] Cratylus@Dead Souls Demo <dead_souls> removeraces will erase the list of races held in the races daemon
[2006.11.20-18.09] Cratylus@Dead Souls Demo <dead_souls> what this means is that when you try to clone a bear, you will get a big pukey error message
[2006.11.20-18.10] Cratylus@Dead Souls Demo <dead_souls> because bears aren't a race any more, so the npc you try to clone will error out
[2006.11.20-18.10] Cratylus@Dead Souls Demo <dead_souls> i consider that "broken" behavior, because i dont like it
[2006.11.20-18.10] Cratylus@Dead Souls Demo <dead_souls> but you'll only see it if you try to load npc's, aka mobs
[Ed note: removing all races will also screw your players]
[2006.11.20-18.11] Ohm@ashdev <dead_souls> what if I want to get rid of all those races, and all of those mobs?
[2006.11.20-18.11] Cratylus@Dead Souls Demo <dead_souls> right
[2006.11.20-18.11] Cratylus@Dead Souls Demo <dead_souls> before i answer your question
[2006.11.20-18.12] Cratylus@Dead Souls Demo <dead_souls> do you plan to have dogs n cats n deer n stuff?
[2006.11.20-18.12] Ohm@ashdev <dead_souls> No. I'm want to completely write all my mobs from scratch, because they're based on a very specific virtual world.
[2006.11.20-18.12] Cratylus@Dead Souls Demo <dead_souls> ok
[2006.11.20-18.13] Cratylus@Dead Souls Demo <dead_souls> what you want to do is not complicated
[2006.11.20-18.13] Cratylus@Dead Souls Demo <dead_souls> so i hope yer not getting that vibe
[2006.11.20-18.13] Cratylus@Dead Souls Demo <dead_souls> the reason i'm cautioning you against it is
[2006.11.20-18.14] Cratylus@Dead Souls Demo <dead_souls> that removing all races basically makes lots of rooms not work anymore, because they contain npc's that requireraces to exist
[2006.11.20-18.14] Syphon@WorldWideResistance <dead_souls> eep, That's a bit of editing
[2006.11.20-18.14] Cratylus@Dead Souls Demo <dead_souls> and disabling sample areas isn't something i recommend to someone who's starting out
[2006.11.20-18.15] Ohm@ashdev <dead_souls> right, that's what I'm trying to figure out. How can I get rid of the mobs, and other spots that require them so it will run right.
[2006.11.20-18.15] Syphon@WorldWideResistance <dead_souls> Can't he just dest npc in all the rooms ?
[2006.11.20-18.15] Cratylus@Dead Souls Demo <dead_souls> ok
[2006.11.20-18.15] Ohm@ashdev <dead_souls> I'm newish to ds, but I've worked with plenty of other muds, and I figured I can reference to the backups if I need help.
[2006.11.20-18.15] Syphon@WorldWideResistance <dead_souls> How many rooms are there
[2006.11.20-18.15] Cratylus@Dead Souls Demo <dead_souls> desting an npc doesnt permanently remove it from the room
[2006.11.20-18.15] Syphon@WorldWideResistance <dead_souls> ah
[2006.11.20-18.15] Cratylus@Dead Souls Demo <dead_souls> to permanently remove an npc
[2006.11.20-18.16] Cratylus@Dead Souls Demo <dead_souls> walk into the room it's in
[2006.11.20-18.16] Cratylus@Dead Souls Demo <dead_souls> and then: delete <npc>
[2006.11.20-18.16] Syphon@WorldWideResistance <dead_souls> nod
[2006.11.20-18.16] Cratylus@Dead Souls Demo <dead_souls> where <npc> is the name of the npc
[2006.11.20-18.16] <dead_souls> Zeus@Ancient Rome deletes Cratylus...wait that won't work :P
[2006.11.20-18.16] <dead_souls> Zeus@Ancient Rome watches the delete backfire and melts into a pile of goo
[2006.11.20-18.16] Ohm@ashdev <dead_souls> yea, but that's not exactly practical in my situation... I want to get rid of ALL npcs in ALL rooms.
[2006.11.20-18.17] Cratylus@Dead Souls Demo <dead_souls> ok
[2006.11.20-18.18] Ohm@ashdev <dead_souls> wait, this doesn't make sense... the only npc I see in the source files is fighter.c
[2006.11.20-18.19] Cratylus@Dead Souls Demo <dead_souls> here's what i think then
[2006.11.20-18.19] Cratylus@Dead Souls Demo <dead_souls> if the sampel areas are incompatible with your vision, then just don't use them
[2006.11.20-18.20] Cratylus@Dead Souls Demo <dead_souls> not trying to be difficult, but if it's a lot of trouble to back-port to them, you're probably better off concentrating on your original areas
[2006.11.20-18.20] Ohm@ashdev <dead_souls> when you first load the server, what areas are loaded, and from where?
[2006.11.20-18.21] Cratylus@Dead Souls Demo <dead_souls> the mud expects /domains/default to exist for some stuff like the default death room and such
[2006.11.20-18.21] Cratylus@Dead Souls Demo <dead_souls> but by editing /secure/include/rooms.h you can just substitute your own rooms for these system functions
[2006.11.20-18.21] Ohm@ashdev <dead_souls> Ohhhhhhhhh! Okay. I see now.
[2006.11.20-18.22] Kriton@Dead Souls Arena <dead_souls> send_messages needs a man page :P
[2006.11.20-18.22] Ohm@ashdev <dead_souls> So you're saying the npcs listed in domains/default/npc/ are required because rooms listed in rooms.h try and load some of those npcs.
[2006.11.20-18.23] Cratylus@Dead Souls Demo <dead_souls> not quite
[2006.11.20-18.23] Cratylus@Dead Souls Demo <dead_souls> hang on crazy 2 yr old
[2006.11.20-18.28] Cratylus@Dead Souls Demo <dead_souls> ok
[2006.11.20-18.28] Cratylus@Dead Souls Demo <dead_souls> in /secure/include/rooms.h you can see that special rooms are specified
[2006.11.20-18.29] Cratylus@Dead Souls Demo <dead_souls> the start room, the death room, etc
[2006.11.20-18.29] Ohm@ashdev <dead_souls> right
[2006.11.20-18.29] Cratylus@Dead Souls Demo <dead_souls> the mud needs these to exist, or your users will be helpless
[2006.11.20-18.29] Cratylus@Dead Souls Demo <dead_souls> ok
[2006.11.20-18.29] Cratylus@Dead Souls Demo <dead_souls> my point is, you dont need to use the ones that are there
[2006.11.20-18.29] Cratylus@Dead Souls Demo <dead_souls> make your own, and then put the filenames in the rooms.h file
[2006.11.20-18.30] Cratylus@Dead Souls Demo <dead_souls> nobody who plays your mud ever needs to see a single stock room
[2006.11.20-18.30] Cratylus@Dead Souls Demo <dead_souls> they can just exist like an appendix, unused, unneeded
[2006.11.20-18.30] Ohm@ashdev <dead_souls> ok
[2006.11.20-18.30] Cratylus@Dead Souls Demo <dead_souls> eventually, once they have no usefulness, deleted
[2006.11.20-18.31] Cratylus@Dead Souls Demo <dead_souls> but for now, i think they *are* useful to you
[2006.11.20-18.31] Cratylus@Dead Souls Demo <dead_souls> as examples
[2006.11.20-18.31] Cratylus@Dead Souls Demo <dead_souls> which is why i caution you against just deleting lots of stuff before you get the hang of how i all works
[2006.11.20-18.32] Ohm@ashdev <dead_souls> ok, that makes sense
[2006.11.20-18.32] Ohm@ashdev <dead_souls> I really just needed to know what I had to do to remove all stock rooms from player view


How do I make my friend an admin?


To make a creator named Xyzzy an assistant admin, ype:

groupmod -a ASSIST xyzzy

Xyzzy then needs to log out and log back in. To
make him a full admin, you'd add him to the SECURE group instead.


I don't like how the who command output looks! You should change it.

Believe it or not, I actually get requests like this. I also
get stuff like "the inventory list should be chronological in
order of acquisition." Maybe that's a good idea, but it's
your mud, not mine. Make it so for yourself.

If there is something broken about the lib itself, such as
an insta-death bug or a command that crashes the mud, I am
happy and eager to hear about it, so I can implement the fix
in the next lib release. If a normal action causes a runtime
error or abnormal behavior, I need to know that. Also typoes, null
error messages, etc...in short, tell me what's broken.
However, if the problem you're having is that the lib,
by design, behaves in a way not to your liking, this isn't something
I'm likely to "fix" for you. For example, if you want a "who"
command with a cooler look, that's up to you to make. You're
the one coding a mud, so you need to take it upon yourself to
understand the code and modify it to suit your tastes.
Similarly, "orcs are too strong!" or "advancing levels
should increase your eyesight" are issues you need to deal
with on your own, using the coding skills learned from reading the
Creator's Manual.


Can you please make the FAQ easier to read? It's too long and complicated.

No.


Most of the file headers have only Descartes's name on them. Did
you really develop this lib or did he?

Both. The lib he released in 1997 was his, and so almost every
file on it had his name. I've been working on it since, but
I am very lazy about headers. I work on lots of files at the
same time, and authorship attribution tends to rank very low
on my priority list. Therefore, even though a great majority
of the files in the lib have been either heavily modified or
created by me, my name is on very few.

I haven't bothered to go back and revise headers either,
because, honestly, what a pain in the butt that would be. I'm
satisfied knowing there's little doubt who has made the many
changes on the lib.


How can I change the colors of the channel messages?

The colors are specified in /secure/daemon/chat.c

You will need to replace the color specification in more
than one spot in that file.


How do I know what other muds use Dead Souls?


mudlist -m Dead

See the creator's FAQ for more intermud command info.


I was hanging out in the Arch room and the loudspeaker went off. WTF?

Your mud receives all sorts of network requests from the
intermud network, such are remote who (asking who is logged on),
remote finger (info on users), locate (trying to find a user
somewhere on i3), etc. Whenever your mud receives such a request,
it used to be announced in the Arch room. If that is still happening,
you are probably not running a current version of the lib.

The current behavior is that network messages are
announced in the network room (below the arch room) and router
messages are announced in the router room (south of the
network room).

Note that these messages are normal,
and do not represent an attempt to undermine your security.


I want to test the intermud channel but I don't want to spam the ds line.

Type: ds_test test

The ds_test channel is specifically for communication
testing so that ds can remain spam free.


What's this "Network room"?

There is a room below the Arch room called the network room.
It is intended to facilitate troubleshooting of network
and intermud problems. Unless you're intimately familiar
with Dead Souls network code, I suggest avoiding this
room, as it is very messy and very noisy.


The web server and FTP server don't work

To enable them at mud boot time for 2.1 and below, uncomment the "inet" line in
/secure/cfg/preload.cfg

To enable it temporarily, type: update /secure/daemon/inet

On 2.3 and above, use the commands:
mudconfig inet enable
mudconfig http enable


These servers do not use the standard ports. The internet standard
http port is 80 and for ftp it is 21. Your mud ftp and web servers
do not use these.
Instead, the network port for your web server is 5 less
than your mud's port, and the ftp port is 1 less.
This means that if your mud is reached by telnetting
to port 6666, your ftp server will be at 6665 and your web server
will be at 6661.

Please note that the web and ftp server are not supported. They work,
but whatever security risk they pose is entirely on you.


I tried to log in to the FTP server but I can't!

Make sure you use your mud name and mud password, not the
username and password of the computer you are on.


I can't do anything with FTP. It just hangs there.

FTP is a funny sort of protocol. If you don't have a direct
connection to an FTP server (for example, you are behind a
firewall), you have to use PASV (or passive) mode. Unfortunately,
at this time, PASV is not implemented in the mud FTP server.

*UPDATE: As of Dead Souls 2.1a19 there is a passive-mode
compliant ftp server included in the lib. See this link
for more information.


The web server gives me a 404 but I know the directory is there.

Like the FTP server, the web server is a very simple program.
It does not do directory listings at all. If you request
a directory, and it can't find an "index.html" file, it
just errors out.

It will also barf if a file you try to serve is
unusually large.

Let me make this point one final, excruciatingly clear time:
If you need a webserver, use apache. The mud www server is available
as a convenience, not as a production-quality standards-compliant
intarweb server.


I'm using an external FTP server, but the files I transfer
become read only!

You need to make sure that the FTP server you use
runs as the same user as the mud driver does, otherwise
you'll have permissions conflicts.


I moved a command from one directory to another. How do I get the new location recognized?

First, run update on the command in question.
then:
If it's not a verb: update /daemon/command
If it's a verb: update /daemon/verbs


The mudtime is all wrong!

The mudtime command tells you what time it is in the game, not what time
it is in the real world. This mud time, or game time, passes much more
quickly than normal, real-world time, so you may see a few sunrises and
sunsets in the game while playing. Hopefully you are sufficiently
well-adjusted that this will not occur in real life.


The time of day is all wrong!

If you used admintool to change your timezone and the time of day is still
wrong, you may be using an OS with timekeeping that Dead Souls doesn't
understand. You may be using a UNIX operating system that is set for
GMT offsets, rather than local time.

If this is so, figure out how many hours off you are, and
enter that value into the EXTRA_TIME_OFFSET parameter in /secure/include/config.h
If you're running a version of Dead Souls higher than 2.1.1, you
should also make sure LOCAL_TIME in /secure/include/config.h is set to 0.

Also make sure to change your timezone during daylight saving
changes. For example, EDT to EST, and vice versa.


What happened to the roommaker and thingmaker?

They produced code that was often incompatible with QCS. They are no
longer supported.


I keep getting 'Connection to address server (localhost 9999) refused.'

This is a harmless error. Dead Souls uses a program called addr_server to
try to resolve hostnames. However, hostname resolution is not important
to running the mud, so it's not automatically configured. If you run
addr_server with a specific port as an argument, and edit mudos.cfg to
point to that port for the addr_server, then reboot the mud, then you
will probably have hostname resolution in your mud.

However, not all OS'es handle name resolution the same, so this may not
work, even if you do everything exactly right. Either way, it doesn't
affect the mud.


Can I charge players a fee for playing on my mud?

NO.

Dead Souls uses MudOS, and MudOS has a license that specifically
and strictly forbids its use in a commercial way. I don't care how
you use the lib, but if you use it with MudOS, you need to comply
with MudOS licensing. If you were to port Dead Souls to some other
driver that allows commercial use, then you'd be all set.

Can people donate money to me for the mud?

Yes.

So long as there is no quid-pro-quo, or anything
about the transaction that is legally regarded as "commercial",
receiving money from people for the purpose of running the
mud is ok. However, I am not a lawyer, so read the MudOS
license yourself.

You should not try to bend the rules. For
example, public television channels often give trinkets to
donors as a token of their appreciation. If someone donates
money to you for your mud and they get a "thank you gift",
this is a quid-pro-quo, or "something for something", and
it's not right.

This is a MudOS thing, not a Dead Souls thing.
If you can't abide by MudOS licensing, just port Dead
Souls to some driver that lets you do commercial stuff.
Then please tell me how you did it, so I can pass on the
leetness to others.


I found a bug. For real. Can you please fix it?

Email me: <put my name here>@comcast.net

Please include a detailed description of the bug, and the exact
error text and commands that produced it. A log file or
screencap would be helpful.

Make sure you have read this:

http://www.chiark.greenend.org.uk/~sgtatham/bugs.html



Where would I edit to change how long someone can be idle before they get disconnected?

1) Modify IDLE_TIMEOUT in /secure/include/config.h
Don't do this with a Windows editor.

2) update /secure/daemon/master

3) update -r /lib/player

Instead of the updates you can reboot the mud.

Users of Dead Souls versions above 2.1a15 can type (for example):

mudconfig maxidle 14400

To make players get logged off after four hours. Setting the
number to 0 makes it so there is no idling timeout enforced.

Note that logged-in players need to log off and log back on for
this change to take effect.


How do I permit all users who log in to become creators automatically?

1) Set AUTO_WIZ
in /secure/include/config.h to 1
Don't do this with a Windows editor.

2) update /secure/daemon/master

3) update /secure/lib/connect

Instead of the updates you can reboot the mud.

Users of Dead Souls versions above 2.1a15 can just type:
mudconfig autowiz on


How do I limit the use of intermud channels?

1) Set RESTRICTED_INTERMUD in /secure/include/config.h to 1
Don't do this with a Windows editor.

2) Add the players who are allowed to use intermud channels to
the intermud group using admintool.

3) update /secure/daemon/master

4) update /daemon/services/*

5) update /daemon/services

6) update /daemon/intermud

7) update /secure/daemon/chat

Instead of these updates, you could just reboot the mud.

Users of Dead Souls versions above 2.1a15 can just type:
mudconfig intermud restrict

They can also use groupmod to add/remove users to the
intermud group:
groupmod -a intermud joebob
groupmod -r intermud jimbob


How do I get off intermud completely?

1) Set DISABLE_INTERMUD in /secure/include/config.h to 1
Don't do this with a Windows editor.

2) update /secure/daemon/master

3) update /daemon/intermud

Users of Dead Souls versions above 2.1a15 can just type:
mudconfig intermud disable


How do I change the start room for the mud?

1) change ROOM_START in /secure/include/rooms.h
Don't do this with a Windows editor.

2) reboot the mud

Users of Dead Souls versions above 2.1a15 can just type (for example):
mudconfig startroom /domains/MystyDragonClouds/room/cloud_nine
If you use mudconfig for this, a reboot isn't necessary, but it'll
ensure all objects in the mud use the new start room.


I don't like having newbies get special treatment.

1) Set MAX_NEWBIE_LEVEL in /secure/include/config.h to 0
Don't do this with a Windows editor.

2) reboot the mud

Users of Dead Souls versions above 2.1a15 can just type:
mudconfig newbielevel 0
then:
update -r /lib/player


I don't want players to be able to pick non-human races.

1) Set HUMANS_ONLY in
/secure/include/config.h to 1
Don't do this with a Windows editor.

2) reboot the mud

* Note that this will not affect players who are
already non-human.

Users of Dead Souls versions above 2.1a15 can just type:
mudconfig justhumans 1


I want everyone to speak the same language.

1) Set ENGLISH_ONLY in /secure/include/config.h to 1
Don't do this with a Windows editor.

2) reboot the mud

Users of Dead Souls versions above 2.1a15 can type:
mudconfig justenglish 1


* Note that this may not affect players who already
are not native English speakers. To change them,
type:

call players_name_here->SetNativeLanguage("English")



I made a change to /lib/player.c and updated it, but I'm
not seeing a difference in my character.


If an object (you) is loaded into memory, it contains
the features and functions of its file and inherited files
at the time it was loaded.

Changing those files and updating them doesn't do
anything to an object that is already loaded using the
old code.

In a case like this, what you want to do is
recursively update the file of the object in question,
then reload the object.

Let's say you modified /lib/npc.c so that
npc's sit down by default. Say you want the fighter in
your test room to possess this new functionality.

If you type: reload -r fighter

then the fighter's file is recursively updated,
the current version of the fighter is whisked away, and
a new version of the fighter is created, incorporating
the new auto-sit feature.

If the change in question is to lib/player.c
or some other file inherited by you, you would
type:

update -r /lib/creator

But you are still using that same old body as
before, so you'll need to quit and log back in to
get a new body using the new code.

Note that disconnecting and logging back in is not enough.
You have to actually quit, so your old player object
is completely destroyed.


How do I change the items new players receive?

Look in /lib/player.c for the function that gives
new players jeans and a t-shirt. Modify this
function to suit you. Make absolutely sure that
the objects you put there actually clone
correctly.

Remember to bk /lib/player before editing this file,
because if you screw it, then log off without
restoring a working copy, you will be sad.


Hey, there's no <foo> class! What's up with that?

True, there is no samurai class, and in fact, as of
this writing there is no cleric, acrobat, frombotzer,
or basketweaver.

The reason for this is that the Dead Souls
mudlib distribution isn't intended to be 100% ready for
players to show up and start doing quests.

What quests there are, what races, classes,
areas, objects, rooms, and NPC's you find in the
distribution are examples. If you open your mud
to players and what you've got is the Orcslayer and
newbie mansion quests, you might as well just close down.
In fact, please do.

Dead Souls is a starting point for a mud.
I have no way of knowing if you're going to have
mermen in an aquatic-theme mud. I have no clue
whether your space aliens will have 8 tentacles or
16 (they like base2, dontcha know).

So, no, there's no <foo>, because the
responsibility for making the mud in your creative
vision is yours, not mine. My job is to give you
a lib with enough working examples and enough
documentation so that you can code your own
basketweaving bugblatter beasts.



Where can I get a Dead Souls mud hosted?

That's a heck of a good question. There are many mud hosting services
out there. A good host will have a high level of service, shell
and file transfer access, etc, for which you obviously will need
to pay money.

Lately I've heard rave reviews for Alternate Realm Hosting from
people with good judgment. If I weren't already happy with
my arrangements I'd probably give them a day in court. They're
supposedly inexpensive and have very good service and support.

I'm told that the free mud hosting at ISUnlimited is adequate.

There used to be another free mud hosting service I
was aware of, and that's FrostMud. It was basically a guy and a Linux
server with room on it for muds. However, there's some sort
of problem he has and it's going away.

Update: He wrote me an email saying he's back, so perhaps you
can still use his service.

There's no such thing as a free lunch. If you want
a reliably solid, well supported, feature-rich platform for your
mud, quit being a cheapskate and cough up the $9/mo. That's
like, what, three espressos a month. Nobody is too hard up to
host commercially, unless you're on the street.

I've heard good things about the commercial service
from Arthmoor and Genesis.

Wolfpaw also is an excellent commercial host: stable and reliable.
One of my test muds is hosted there, and this is the uptime report,
as of 25 December 2006:

Dead Souls Arena has been up for 11w 6d 7h 28m 34s.

However, Wolfpaw has become rather tired of dealing with
newbie mud admins, so unless you're a hardcore do-it-yourselfer
who just needs a big data pipe and nothing else, you may be
better off with other hosting.

If you have a DSL or cable modem, and your computer is
up all the time, you can just use that, too. Your IP may be
dynamic, making it tough for people to find you, but there are
dynamic-dns services out there that help keep your ip
tied to a specific name.

If you're really hard up you can email me and beg for
me to host you for free, but you'll get no fancy schmutz like a
web page or shell access. And if your mud gets on my nerves
(being inactive for a long time is enough to do that) I'll just
wipe it. Possibly without even warning you. It's not that I'm
a jerk or I like being mean. I just don't have a lot of time
for nonsense.


Your LIB_MXLPLX system is all screwy. I changed it and it works. Wanna see?

Hell yes. I'm not just in this for my health. I want
more people coding in LPC so I can look at the fresh ideas and
new perspectives of other people (read: swipe code).

Send me an invitation to your mud by email or <ds>. I'd
love to look at your work.

If it is code you are willing to donate to Dead Souls, I
will gladly accept its submission, also by email. There's no
guarantee it will make it into any future release, but it just might.

Please be aware that by doing so, you signal you claim no
copyright to the code (you must make it Public Domain), allowing me to
publish it and preventing you from ever revoking my right to distribute it.


You also represent that no third party has copyright to
the code, and hold me harmless in any subsequent
dispute between you and any other third party.

If you want to email me code but wish to retain
copyright, please state so clearly in the body of your email. I
will honor that request
(and it's the law so I don't really
have a choice). Just be aware I will not put code into Dead
Souls that anyone other than me has copyright to. I can't
afford the risk of someone deciding I can't distribute
code that DS may eventually rely on.

Also, I don't want to hear from anyone about my
use of legal terms of art. I know damn well it's more complicated
than I make it sound. My phrasing is sufficient to make
the legal practical transaction of ideas possible here.

The point I'm making should be clear. If it isn't,
please consult applicable laws, etc.


How are files organized in Dead Souls?

cd / and ls to view the top level directory. The
list may be largely meaningless to you, so let's review it here:

cfg/

General configuration files for timezone and such.

cmds/

Main location of commands that don't require special access
privileges. Commands are different from verbs in that they tend
not to manipulate your environment, but rather deal with
the player's relationship to the system and/or files.

daemon/

Daemons are files that provide access to data files in an
organized way. For example, adding an occupational class
(like, say, assassin) to the game needs to be done in a
precise way in order for it not to break things. By sending
the data to the daemon first, you can be sure that the
new system configuration is entered properly. Daemons also
provide a means to access data, like "how much is silver
worth compared to gold", that is uniform across the mud, and
prevents accidental overwrites of data files by multiple
editors.

doc/

General documentation.

domains/

This is where MUD game areas go when they are complete
and ready for general play by the public. Once here, only
admins have write access to the files.

estates/

Where player-owned objects and rooms are kept.


ftp/

The base for the MUD ftpd. Using the ftpd is probably dangerous
in terms of your system security, and I discourage it, but if
you are determined to have mud ftp access for your creators,
this is one way. See /secure/lib/net for the actual server. It
may or may not work. I won't support it.

include/

Include files provide a set of constants for your files. For
example, if you include <damage_types.h>, you can specify in
the code for your chainmail that it protects against
the damage type "BLADE" at a certain level.

lib/

This is the heart of the Dead Souls lib. This is the location
of the files that your objects, be they swords, shoes, or
handguns, will use as their configuration base.

log/

Log files.


news/

Announcements are made here. For example, in /news/creator
you can post a notice that you have added a teleportation
spell, and when your creators log on, they will see the message.

obj/

Contains some important templates, especially some for the QCS.

open/

Legacy directory. Kept for compatibility. Historically this
directory has served as a place where creators can put code
for others to freely modify.

realms/

This is where creator home directories are.

save/

Files that describe properties of the MUD's systems live
here. The number of limbs that a bat has, for example,
is in races.o. In classes.o you'll find the skill ranges
for fighters. Do not edit these files. They must be
modified by daemons only, or you risk corrupting them.

secure/

This directory will be described in a separate section below.

shadows/

Shadows are a controversial feature of LPC. This directory
is designed for shadow objects, but they should be very
rarely, if ever used. Basically shadow objects are objects
that attach themselves to another object, intercepting
function calls. For obvious reasons this is a security
risk, so unless you really really know what you're doing,
avoid them. Shadows not in this directory will not load.

spells/

Pretty self explanatory. The spells daemon looks for spells here.
Spells not in this directory will not be available.

std/

Provided for backward-compatibility with older lib
files. Not needed if you aren't porting from an older
or different lib (such as TMI-2 or LPUniversity).


tmp/

A directory anyone can write to. Generally for swapping
data between objects, systems, or people. Note: files
here can't be loaded into memory with the update command,
for security reasons. If you need to put something in
a world-writable place but need it to be loadable, use
/open instead.

verbs/

A controversial topic. Verbs are a kind of command. For
example, go and sit and open are verbs. Specifically, verbs
are commands that interact with the user's environment. The
idea is that throw my first red rock at the green goblin
should work, and should work the same everywhere on the
MUD. Verbs are a source of debate among some people, because
to folks accustomed to add_action commands, verbs seem
excessively complex. Verbs not in this directory will
not load.

www/

Like the ftp directory, but for the MUD webserver.


Ok now let's take a quick look at the /secure directory: ls /secure
As you can see, /secure seems to have many of the same directories
that the root filesystem has.
The reason a /secure directory is needed is that
there are files that should not be readable by everyone, and
there are files that must be writable only by a few. The MUD security
system uses the /secure directory as a means to control access to
such files.
For example, the average creator has no business
accessing the player data files of other creators or players. Therefore
/secure/save/creators and /secure/save/players is offlimits to them.

A directory without a counterpart in / is /secure/sefun. This
is where simulated external functions reside.


What are sefuns and efuns?

First let me explain that the driver has built-in
functions that are available to the mud. For example,
type eval return find_player("cratylus") , but replace my name
with yours. Your player object pointer will be found and returned
to you (more or less. strictly speaking it's more complicated).
The driver provides this function. Because it is "external"
to the mudlib, that is, it's in the driver and not the lib,
it is called an external function, or more commonly, "efun". The
idea is that certain actions you ask the mud to perform are
so common that they are made available MUD-wide.

Efuns are ridiculously useful and powerful, and because
they are in the driver as compiled code, very fast. A near-complete
set of efun documentation is available in /doc/efun.

However, the driver does not contain every possible
MUD-wide function you might want. For example, there is a
tell_object() efun, which lets you send a message to an object
such as a player. The syntax is something like this:

tell_object(find_player("cratylus"),"Hi.");

Which doesn't look like much, but believe me, this
kind of stuff adds up. I wanted to make this simpler, so I
used what is called a sefun, or a simulated efun. It is
a function that is available lib-wide, but it isn't in
the driver. Instead it is provided by the lib itself (the
master daemon, specifically). By adding the appropriate code
in /secure/sefun/ I have now made available a tell_player() sefun,
which works like this:

tell_player("cratylus","Hi.")

This simplification of code will become more obviously
useful to you as you get more coding under your belt. Most
sefuns are documented in /doc/sefun.



Whew! Ok now I know where stuff is. What's next?

You probably want to examine how objects are written.
Type goto /domains/town/room/road and wander around town
a bit. If you want to see the code for something, for example,
the beggar, about beggar should do it, provided the beggar is
in the room.

To see the filenames of the objects around you,
type scan here, or scan me to scan your own inventory.

If you've never coded before, this is the hard part.
To understand what you're looking at when you run commands like
more /domains/town/weap/orcslayer.c you need to get comfortable
with LPC.

The brute force way of doing this is copying stuff
and then changing the descriptions, thus making new stuff.
This will work, but you'll waste time looking for examples of
exactly what you want to do..and you may not find them.
Instead, learning LPC will let you create whatever
you want, without relying on templates.

This means that now you must read the LPC Basic
manual, then the LPC Intermediate manual. As admin, your
creators will expect you to know what's in there.

On your person or in the chest in your workroom is
the Creators Manual. Read both the Players Handbook and
the Creators Manual from cover to cover.

It's also important to read the Administrator's
Guidebook.


Oh, man, you're kidding! Those are, like, books! Can't I
just start making stuff?

Well...ok. But you need to go through the docs
soon, ok? In the meantime, read the QCS chapters in the
Creators Manual to get you quick-started in the creation
process. Remember you need to be holding your Creator
Staff in order to access the QCS commands.

Start with chapter 31, like this:

read chapter 31 in my manual


Everything is su-u-u-u-p-e-e-r-r-r s-s-l-o-o-o-o-w-w-w

First, make sure you are using the latest available version of
Dead Souls (check here). Older versions of Dead Souls
are known to have nasty memory leaks.

Next, see if you have runaway objects. An object can be coded
to do really unpleasant stuff like replicate itself over and
over until it brings the mud to its knees. Find out how many
objects are loaded by typing: eval return sizeof(objects())

If the count is in the thousands, and only a few people are
logged on, you may have a runaway. Most often this involves
NPC's doing stuff you didn't expect. Reset all loaded rooms
with the following command (you may need to enter it more
than once):

reload every room

perhaps followed by a:

flushobs

If the lag clears up, you found the culprit. If not, see if
the callouts list is clogged with the command: callouts

If all else fails, reboot the mud and ask for help on the ds line.

Please note that the rage virus (especially if unleashed
in the menagerie) is notorious for redlining the mud. Having
hundreds of NPC's all engaging in simultaneous combat
while infecting each other with a rapidly spreading hostility
virus can be expected to impact overall performance. So please try
to avoid the rage virus unless you are specifically stress testing
your system.


Dude! One of my creators just kicked me off my own mud!

One of the virtues of LPC is that it is flexible and powerful.
One of the drawbacks of LPC is that it is flexible and powerful.

It is not possible to make an LP mud that is
immune to abuse from creators. You just can't. The MudOS
function set is just too complex and sophisticated to eliminate
every possibility of abuse.

You will therefore *always* be vulnerable to things
like people coding objects that crash the mud on purpose (I
won't detail how that can be done, but anyone with intermediate
LPC skill can do it, and utter newbies can even do it with
a stupid enough mistake), finding a way to dest admins, or
continually updating recursively the /lib filesystem. A
jackass will always find a way to expose you to her jackassery.

This means that you need to know who is coding on your
mud and what they are doing. Your job as an admin is to
immediately deal with coders who pose a discipline problem.
If they fool you once, shame on them. If they fool you
twice..the..they...they shouldn't fool you twice is what I'm
saying.

This does not mean that Dead Souls is somehow
impossible to secure. You can easily prevent unauthorized
access to lib data. See the next section for how this works.

What you can't prevent is some dude off the internet
you just met and made a creator from wreaking havoc on your
mud and creating a nuisance of himself. You have to know who
these people are and you have to have a level of trust and
confidence in them, otherwise you need to use the decre
command.


Is Dead Souls secure?

The short answer is no, nothing I know of is "secure" in the
sense that you don't need to continually pay attention to it.

Just like any other Internet program you use, Dead Souls
is not an obvious security risk, so long as it is not used carelessly.
And, obviously, games of any kind, including Dead Souls, should never
be installed on any mission-critical, national security, public
safety, or health care server.

Dead Souls security involves two separate spheres:

1) The binary executable and the system that runs it.

2) The mudlib and the code that you use and create.

The first sphere is probably most important. Presumably
you plan to run a mud on a computer that does other things too,
and you want to keep those things separate from your mud. The
most important thing to do is to avoid running Dead Souls as a
privileged user.

In the case of Windows, this means that the
program should not be run by Administrator or anyone in the
Administrator group.

For unix users, this means that the driver should not run
under uid 0 (root).

The reason for this precaution is that if some genius
hacker manages to exploit some unknown weakness in the program,
it is better that the process they hack doesn't have full admin
privileges to the box.

This caution has little to do with Dead Souls specifically.
It is a warning I'd give to anyone planning to run any kind of network
server. You should take your own security seriously, and
if you do not understand your own security situation, you need to take
a step back and ask yourself if running a mud at all is a good idea.

Sphere 2 is lib security. In older muds, file and directory
privileges were handled by attributes on the files. If a file's
user id (UID) matched a user's UID, then that user had full access
to it. Such systems often had complex systems that evaluated
effective UID (EUID) based on the file's attributes, its parent
directory, the user's ID, possibly group id, etc. This is an
entirely valid security model, but because of its complexity,
it tended to be exploited easily and often. If you don't
stay 100% on top of such a system (just like any OS), there's
no way to be sure you won't rooted.

With stack security, privilege management is much, much
simpler. A file's privilege is based solely on its location. If
a user doesn't have read access to /foo/bar/ then she can't read
or modify /foo/bar/file.c. If someone with privs to that location
copies the file to somewhere else, then the privs of that new location
are in force on the file.
The "stack" part of stack security comes from the mud
evaluating the privileges of all the objects involved in the
access request. If you're unprivileged and you manage to get a
privileged object to make the access request for you, the access
will fail, because you are unprivileged, and you are still part
of the function call stack (i.e., the list of instructions that
form a chain between the command and the intended event).

Granular (more detailed) modification of user privileges
can be done by changing files in /secure/cfg to grant
users and groups specific privileges. Also see
the grant command, as well as domainadmin.

Security bugs usually aren't about the security model itself
being weak, but rather careless code (generally from me). If
you find such a bug, please let me know right away so I
can fix it. You will receive credit for the discovery on the
hotfix page.


I sent you my code a week ago. Is it in or out?

How long it takes me to review code submissions has nothing
to do with what I think of you, your skills, or your
code. It takes me a long time because Dead Souls isn't
actually my job, and is not a physical member of my
family, so it has to wait its turn sometimes, for my attention.
Sometimes I will get to someone else's code sooner even
though I received yours first. What can I say. Sometimes
I feel like dealing with a particular thing at a particular
time.


Did you finish the bfd() sefun modification I asked you for last night?

I'm on the ds line a lot, and generally accommodate people's
requests right away if I have time. This makes it seem
sometimes like I can turn orders around in minutes or
hours, like a short-order cook.
This is an illusion. I do this sometimes
for requests that strike my fancy or that are so simple
they are not inconvenient, or maybe because I happen to
be bored at that moment. But my sometimes doing this
doesn't mean folks should expect some sort of prompt
turnaround on special requests.
In general, I am not sitting at my desk waiting
for code orders. I'm doing something else. If I get to
your request right away, then good for you. If I don't,
then I'll get to it when I get to it.


The queeg daemon is a horrendous mess. It's inefficient and frankly offensive.

I'm not an especially gifted programmer. In fact, I view
myself rather as a Pakled from the Star Trek series. I
look for things that make the code go. I look for things
that make the code strong. Sometimes, because I am not
a trained or professional programmer, things are done
in a way that shock the conscience of more sophisticated
practitioners.
If you find such code (and I do hope it is rare),
bringing to my attention that it has been implemented in a
wretched way doesn't help me. I know that. I wrote it. If
you want to help, send me an email with the fixed code.

You implemented my code but didn't give me credit.

Whoops. Send me an email telling me where I goofed and I'll fix it.


Intermud mail doesn't work

Yes it does. If you tried to send intermud mail to someone
with Dead Souls and it failed, then one or more of the following is true:

* You are using a Dead Souls version below 2.4.1.
* The recipient is using a Dead Souls version below 2.4.1.
* The recipient has disabled their OOB service.
* The recipient has disabled their INET service.
* The recipient is firewalled and cannot accept OOB connections.


The admintool menus let you pick options that aren't visible

I can't decide whether this is a feature or a bug. I'm
leaning toward "laziness".


What does locking the mud do, exactly?

When the mud is locked, only members of the authorized
groups are permitted to log in. By default, these
groups are SECURE, ASSIST, ELDER, and TEST. Anyone
who is not a member of these groups, whether they are
a creator or a player, is prevented from logging in.

To lock the mud, use the admintool command, option a.
To add people to groups, use the admintool command, option v.


The race help output is inadequate for role-playing. How do I change it?

By default, help human will output various characteristics
of the human race, as known to the race daemon. If you
want instead to provide your own help data on the history and
lore of humans, simply create a file called /doc/help/races/human
and put your information in it. That information will then
be what is displayed when requesting help on that race.


I need to know what features to expect in the next release so I don't
waste time duplicating effort

Visit http://dead-souls.net/RELEASE_NOTES for information on
the latest releases and what they contain. The topmost
version is usually not yet available for download, and
is listed so that folks know what's coming in the
next release. If this is so the version name will have
"(unreleased)" next to it.

As of 2.0r19, the dsversion command is available to
allow you to query that site from the mud itself.


You need a development roadmap and task tracking

No, I don't. If I had developers and teams and
such things, then I'd use all the fancy project
management stuff available on Sourceforge.
But I don't want to manage developers,
I want to lib code.


How do I update a sefun without rebooting the mud?

To have your new nit_pick() sefun take effect in the
running mud, you might do something like this:

update /secure/sefun/nit_pick.c

update /secure/sefun/sefun.c


My new sefun updates but I can't seem to use it.

Make sure the sefun is prototyped in /secure/sefun/sefun.h

If the sefun is in a new file you created, make sure
that /secure/sefun/sefun.c inherits that file.


What's the point of the apostrophe-stripping for args in lib/command.c?

It was cheap workaround for a parser problem. Dead Souls 2.1 and
above no longer implement this, as the driver issue has been
corrected.


How does one achieve 'high mortal' or 'ambassador' positions?

Those are legacy positions from DS v1/Nightmare IV/3. They are
basically groups, managed by an arch with admintool, which
can be granted privileges not normally enjoyed by mortals.
In the current implementation of Dead Souls, those
positions are vestigial. You can implement them on your
own mud however you please.


I would like XYZ and PDQ to happen every time the mud boots

The most common way to have this happen is to add
your daemon (and typically that's what you'll
want to start at boot) to /secure/cfg/preload.cfg .
This will ensure that it gets loaded
before the mud accepts any connections. It has the
added advantage of being included in the list of daemons
that the mud periodically checks and restarts if they
have died.

If it isn't a daemon, but rather some
specific function you want to happen at boot, simply
add the relevant code to /secure/daemon/autoexec.c


I can't login! I keep getting: "It seems some work is being
done right now, try later."

This is bad. What this means is that some
files that are needed in order to load your player
object cannot be loaded. It can be any of a very large
number of files, which is the problem. Usually this
happens if you've been, for example, messing around
with player.c, then broke it, and rebooted the mud. Now
since player.c can't be loaded, you're locked out.
It could be any of the files loaded by your
player object, or other daemon files needed by your
login. The only way to narrow down the possible list of
files you corrupted is by examining the output of the
console (the window where you type the command line
to start the mud) and reviewing log/runtime and
log/catch for clues.
Once you've found the culprit, either fix it,
or replace it with the original version from the
Dead Souls distribution package.


I had a really great idea that revolutionizes ds and you
refuse to include it. I am forking ds development and
making my dream come true.

Ok then, have fun. All I ask is that you give your
project a name that isn't going to confuse people
as to which lib is which. Confusing your user base
isn't a good way to get started on such an enterprise.
Send us a post card once in a while.


What do the version numbers mean?

2.0r16 means "Major version 2, minor version 0, release number 16".
Releases happen pretty frequently, to add functionality and fix bugs
from the previous release. When the basic functionality of a minor
version is as bug free as reasonably possible, a new minor version
change happens.
Major version number changes are very rare and represent a
vast difference from the old major version. Versions 1 and 2 of
Dead Souls are so different as to be largely incompatible with each
other's code.

As of this writing, 2.4.1 is released as the current stable version.


The Dead Souls router is down.

Use the switchrouter command to change between
routers. The new default I3 router for Dead Souls muds is called
*yatmim. So far it's been dramatically more reliable than
the old intermud.org router, which was known as *gjs.

If the router you are on is down, try using the switchrouter
command to connect to a backup. As of this writing, the *i4
and *yatmim routers serve as mirrors for each other, so
that connecting to one will give you access to the same muds
as those on the other.

For more information on switching between routers, type:

help switchrouter

If the *yatmim router goes down for more than a
few minutes, make sure to check the router page to see if
the IP address or port have changed.


I'm going to totally revamp <insert highly complex system here>.
Will that be difficult?

This is, surprisingly, a fairly common question.
Basically, the answer is:

"If you have to ask, then the answer is yes."

It's not an impossible task to, say, rewrite
combat to be just like the combat you're used to on LeetFooMud.
It's totally doable, and not *all* that difficult for
an experienced coder.

But if you're new to LPC, you need to concentrate
on getting the basics down before you put that cart in
front of that horse. Let me phrase it like this:

"If there's any part of the Creator's Manual you don't
know and understand, you aren't ready to do lib coding yet."

If you are at 100% grok with the manual, then
please read chapter 8 of the Admin's Guide to get started
on serious lib work.


I've hired an area coder to make a new domain. I want her
to be able to use QCS in /domains/MistyDragonShireMysts

The default behavior of QCS is to try to figure out
what directory makes most sense to write in. It assumes
that it's only going to write into areas you have write
permission to. Since your new coder doesn't have write
access to /domains/
MistyDragonShireMysts, QCS instead will
write to the next most logical place: her home area directory.

This is true even if you use the grant command
to enhance her access. QCS's authentication mechanism is
entirely separate from the grant/access system, which works
fine for non-QCS editing.

To make your new domain, use the domaincreate command:

domaincreate MistyDragonShireMysts

To enable your new coder to use QCS in that domain,
use the domainadmin command to manage the admins of that
domain. A domain may have more than one admin at the same time.

For more information on domainadmin, type:
help domainadmin

For more details on where QCS puts things, be sure
to read this Creator FAQ section.


How does player voting work?

The voting system enables players to nominate and
vote for class leaders. A Fighter can nominate and vote for
his Fighter leader, Mages can vote for a Mage leader, etc.
The nomination period usually lasts about a week, then
nomination closes and voting begins. Voting ends when
an arch enters the voting room (it's in Town Hall) and
issues the appropriate command. See the voting room printed
material for instructions.
When the voting is ended, the winner becomes
council member. The high council is composed of
representatives (the leaders) of the classes. What kinds
of authority the council should have is entirely up to
you and your mud. No default powers are enabled, you'll
need to code your own sets of privileges and responsibilities
for your councilors.
Because creators have no business meddling in the
affairs of mortals, they cannot vote, regardless of their
class affiliation.


What are "estates"?

Any references to estates in Dead Souls code or
documentation are artifacts of pre-1.1 Nightmare code.
Estates in the Nightmare lib were player-owned areas,
which were granted to players of specific rank, status,
etc who could afford to buy the rights to them.
Estate support in Dead Souls is planned for post 2.1.


What are "events"?

Some things should happen regularly. Perhaps
log rotation, or backing up some .o files. The events
daemon, or EVENTS_D handles this. To add or remove
events use the add_event() sefun. For example, to add the
log rotation event, I issued this command:

eval return add_event("/secure/daemon/log","/secure/daemon/log","RotateLogs",({ }),7200,1)

Which said: "Every two hours, call the RotateLogs function in the log daemon."

To see what events have been scheduled, type:
events

To remove an event from the events schedule, find its
next runtime, and use it as an argument to the remove_event() sefun,
like this:

events

The following events are pending:
1145159511 RotateLogs Sun Apr 16 03:51:51 2006 EDT

eval return remove_event(
1145159511)


Where does user monitor data go?

When you monitor someone, or if you enable
GLOBAL_MONITOR, monitor data is logged into /secure/log/adm.


How would you set a