- Fixed: Files containing lines with more that 1024 chars were crashing on
save.
- Fixed: Popup menus on Dream Seeker were returning the first entry when none were
selected.
- Fixed: The "accept-links" option on Dream Seeker was occasionally being
ignored.
- Fixed: The info panel wasn't refreshing properly after being toggled off/on.
- Fixed: The statpanel() command wasn't always refreshing the proper panel.
- Fixed: prompt() as file|null was incorrectly handling null input and
invalid files.
- Fixed: Flicker should be eliminated when the appearance of objects changes. The
client was supposed to be falling back on the old appearance until it
downloaded the new one, but there was one _final_ bug preventing that from
happening.
- Fixed: The dialogue prompts were not getting called when the user hit F1 in an
empty text argument (with the quote already typed).
- Fixed: Empty file arguments were being treated as errors rather than
as missing like they used to be (so that the prompting dialogues get invoked).
- Fixed: Optional client arguments followed by server expanded arguments
were not being handled correctly (resulting in error messages).
- Fixed: Objects that went off of the client view and changed their direction to
face south were retaining their old direction when they reappeared on the
map. (Zilal's misaligned sheep problem.)
- Fixed: Deletions or changes in order of stat panels were not always being
respected by the client.
- Fixed: The command line parser had a few more bugs: optional file
arguments were not parsing correctly and neither were groups of multiple
optional args.
- The dialogue prompts for command-line arguments now use the argument
description for the prompt text.
- Added client.Stat(). By default, it calls client.stat_obj.Stat().
- The preferred syntax for "locate(Type,Container)" is now "locate(Type) in
Container". If the result is being assigned to a variable with a declared
type, the Type argument is optional and will default to the type of the
variable being assigned.
- The "list" command at the server prompt now outputs a list of hyperlinks
rather than just plain text.
- The client was filtering out empty commands (ie just hitting enter). In
telnet mode, it now passes these through. In BYOND mode, it echos the
command (if echoing is turned on) but doesn't do anything else. That way
you can press enter to put some space in the terminal window when it is
getting cluttered up. Or you can press enter repeatedly very quickly when
your roommate walks in and looks over your shoulder and is just about to see
a discussion of his personal defects.
- There is now an "anything" input type. It is used to combine constant
input types (null, num, text, file, etc.) with objects in a list. For
example (A as null|anything in list(...)). The compiler warns if you don't
use "anything" or an object type filter (one or more of mob, obj, turf, or
area) in this sort of case. Basically, that should only affect situations
like (A as null|text in list()), which should probably be changed to
null|anything, because that is probably correct.
- In cases like (A as text|anything in list(...)), it should now only prompt
for stuff in the list, effectively ignoring the text input type.
You can still enter it on the command line by
manually inserting a quote.
- Previously, verb help was generated by outputting the expected type of
each argument followed by the programmer-supplied desc text string. That
doesn't always generate the most user-friendly output. Now, the programmer
can specify the help text for each argument by putting it inside ()'s at the
beginning of the desc text. Argument descriptions are delimited by commas.
Any arguments that are not explicitely described will resort to the old
method, eg:
mob/verb/tell(mob/M in world,T as text)
set desc = "(recipient, message) speak to someone privately"
M << "[usr] tells you, '[T]'"
This produces the help text:
"tell recipient message (speak to someone privately)"
Without the argument description, the help text would be:
"tell mob in world "text" (speak to someone privately)"
Notice that parenthesis are now automatically inserted around the final
description to separate it from the arguments. People who have been doing
that manually will need to remove the parentheses from their code
so the entire desc is not mistaken for an argument description. That is for
the better, because the help is used in different contexts (command-line
help vs. dialogues) and the way it is formatted should therefore be left up
to the client rather than the programmer.
- DreamSeeker now recognizes a special .dms (DM script) file type. This
may contain client-side "aliases" for server-side commands. They will be
incorporated when the file is opened.
This is most useful in telnet/mud mode so that you can make your own verbs that
work with command expansion, help, prompt dialogues, and menus. The return value of
the alias is then executed as the real command.
The syntax for aliases is a lot like verbs in DM. Example:
shout(T as text)
set desc = "(message) tell something to the whole world"
return "shout [T]"
So if this alias were invoked from within a (non-BYOND) mud, the "shout"
command would act just like an equivalent verb from a BYOND world, showing up
in the expansion lists, the verb panes, and so on.
You can set the name, description, category, and hidden flag, just like with
verbs. In the code, you can also use comments, preprocessor directives, and
so forth. The expression syntax in the return statement is currently
limited to substitution of arguments.
You can also define alias arguments
with no parse type. These just accept a single unfiltered word as input.
The only real purpose of that is to provide a little syntax help to the user
even though an expansion list cannot be provided.
If a user wants to send a command literally (because it conflicts
with an alias or a built-in command such as .quit or .logout) it can be
done by simply sticking a double quote at the beginning of the command.
- Another feature of the script file is the ability to make links to
worlds. Such links may be incorporated by using the special #define URL
statement:
#define URL "byond://dantom:6000#hub"
If there are multiple definitions, the last one takes effect, so you can
include any standard script files first before setting the actual address
that you want. The reason we need quotes around the whole thing is to
prevent the // from being treated as a comment.
Double-clicking a .dms file containing a link will cause Dream Seeker to
connect to that world. Moreover, making a hypertext (web) link to a .dms file will
automatically cause DreamSeeker to connect to the desired address.
There are three standard script files for the three protocols: byond, irc,
and telnet. If the player connects to a world without using a script, the
appropriate standard script file will be searched for (in the lib directory)
and executed if it exists. This is most useful for irc.dms, which will
contain all of the standard IRC commands.