seisatsu / dennismud Goto Github PK
View Code? Open in Web Editor NEWDennis MUD - A multiplayer text adventure sandbox engine where the players build the world with in-game commands.
Home Page: https://dennismud.xyz/
License: MIT License
Dennis MUD - A multiplayer text adventure sandbox engine where the players build the world with in-game commands.
Home Page: https://dennismud.xyz/
License: MIT License
Allow connecting with a standard telnet MUD client.
There should be one or more commands that close the session from the server-side. Most likely the pseudo-command "quit" like in cli-frontend.py
.
Glue/unglue commands to prevent items from being picked up by anyone except the owner.
Enforce usernames and checks against usernames as lowercase to simplify things.
Add a break user
command for wizards which deletes a user account and removes them as owner from everything they owned in the world. Items with no owner will be owned by <world>
.
Also add a purge user
command which deletes everything in the world for which they were the only owner.
Most of the code in command modules is duplicated across several modules. Common procedures should be split off into utility functions to make command code shorter and more readable.
These common functions will be kept in commands/_util.py
. Python files starting with an underscore in the commands folder will be importable by command modules, but will not themselves be loaded in as command modules.
A command to list all of the exits in the world that lead to the current room. Usable by the room owner and by wizards.
Set command is for miscellaneous exit, room, and item settings. Permit command is similar, but for permissions.
Example: "permit room 3 enter 0" to prevent anyone except the owner from entering room 3.
The default MOTD should more clearly explain how a new user should use the help
command to learn the game.
Add the ability to navigate through command history on the websocket frontend by pressing the up and down arrows in the text box.
For the actions associated with the decoration commands, there should be a way to set an action that doesn't necessarily begin with the player's name, using some token to specify where the name should go. When the token isn't present, the action starts with the player's name by default.
e.g.
> decorate exit 1 fell through the floor.
Seisatsu fell through the floor.
> decorate exit 1 The floor fell out under %u.
The floor fell out under Seisatsu.
Items should be able to do things. This may be a complicated feature.
Seal/Unseal commands to prevent anyone except owners from entering a room.
Port to BlitzDB TinyDB so we have the option of saving worlds to flat file or MongoDB.
In order to allow connections to the websocket server by opening the html frontend locally, the allowNullOrigin option in Autobahn must be set to true. There should be a config option to enable this.
Using format() to format console.msg() output will make the code cleaner and more readable.
Ability to send private messages.
The current way of listing commands in a category is clumped together and hard to read. Format the output into neat columns.
The purge commands, as well as a possible break user
command, should explain what will happen upon running, and ask the user to run the command a second time to confirm, or enter a dialog requiring a secondary input such as a "Y/N".
Prefer a series of failure checks followed by the command action, instead of nesting checks, wherever possible.
There should be a purge entrances
command that breaks all exits leading to the given room.
Items that hold other items.
Allow items and rooms to have multiple owners.
BlitzDB can't handle concurrent access, so I can't use it for communication between the planned web interface frontend and backend.
Items should have ownership.
The users table in the Router in server.py would be cleaner if each user was represented as a dict with keys "service" and "console", rather than the list [service, console.Console(dbman, peer, self)]
. This would make code more readable in some other places as well, such as the break item
, unduplify item
, and requisition
commands, and anywhere else where we have to step through the list of all online users.
A version 0.0.1 package ready to extract and run should be released soon, both for Linux and as an EXE build for Windows. It should be released once all of the code and commands are fairly well documented.
Commands should not be case sensitive.
Currently the server logs aren't as useful as they could be. Logging messages should be improved and expanded upon.
Visiting https://dream.uboachan.net/ results in a certificate security error. If the error is bypassed, the content from https://admin.seisat.su/ is served.
Visiting https://dream.uboachan.net/ does not display an error and the content from http://dream.uboachan.net/ is displayed.
The register
command should take an email address. There should then be a reset password
command which takes an email address as an argument and sends a new password to the email provided. There should also be a change password
command.
Add an "action" attribute to exits for the action that is displayed when a player goes through an exit. For example, if the exit is called "window" and the action is "jumped out the", then the message will be "User jumped out the window."
Command to set how often an item or exit will appear to a user entering a room.
randomize <item/exit> <id> <chance>
Where the possibility for the object to appear is 1 out of every chance
times.
There should be a purge exits
command that will break all exits in a room that you own.
Lock/unlock commands to prevent anyone except owners from editing a room or item.
Don't show wizard commands to non-wizards in help message.
In order to support the sharing of people's worlds as standalone packages, there should be a utility included that can import and export single files which contain a Dennis game's database state. Import and export of user data should be an optional switch.
The world databases should have a version string, which gets incremented each time there is a change to the schema. This will get verified by the Dennis server as being the correct version for the currently running server version, and it will also be used by update scripts to know which transformations to make.
Solving this issue should require the update script to be version-aware.
Shift focus to a working browser-interfaced Dennis client-server model using MongoDB for communication.
Command aliases should be defined inside of their respective command modules, instead of in the _process_aliases() function in console.py.
It might get a little obnoxious for some players to see the full output of the look command every time they change rooms. This should be configurable client-side. Add enable autolook
and disable autolook
commands.
Currently secure websockets don't work. There is a handshake failure of some kind.
Allow completion for non-ambiguous partial names in commands.
Example: If there is an exit called "Big Wooden Door", then go big
should select for that exit. However, if there is also an exit in the same context (same room in this case) named "Big Plastic Door", then go big
should reject the command string as ambiguous.
This should also work on commands like use
, look
, and get
, to name a few.
Grant/revoke ownership of a room or item.
grant item <id> <user>
revoke item <id> <user>
grant room <id> <user>
revoke room <id> <user>
There should be a purge inventory
command that breaks all items in your inventory that you own.
Currently, Dennis only supports insecure userless MongoDB access.
The telnet server (and websocket server) currently don't send any message on connect. It's hard to tell on some clients whether you connected at all. Telnet should send an MOTD with useful info for new players.
Issue #17 should be done first.
Command help messages should explain the command's use and place in context with other commands. At least include a usage example for each command.
The list users command should show a count of total online and offline users.
Use Twisted's multi-service feature to merge the telnet and websocket backends. This will consolidate things and allow users on both interfaces to communicate with each other.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.