Giter Club home page Giter Club logo

sillymud's People

Contributors

dangitall avatar jonm avatar marado avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

sillymud's Issues

Support a `make install` target that does not overwrite existing game files

In particular, the source code comes with some empty files (e.g. players) in the lib/ directory, but once you have the game up and running, a subsequent make install will put the empty versions over the existing ones, which is not the desired behavior. Really for the length-zero files, we should either have the game attempt to create them empty if they don't already exist (in which case we don't have to install them at all) or we should have the install target do a touch instead of a cp.

release numbering / semantic versioning discussion

Proposal: use semantic versioning for release numbers.

<major>.<minor>.<patch>

Currently we are at 0.1.10. I would characterize our progress thus far as we've made things runnable but probably not cleaned up enough to warrant a 1.0.0. As a 0.x.y version, we should get some leeway on backwards compatibility. So I propose, for now:

  • Refactoring and bug fixes should increment the patch number
  • Introduction of new features should increment the minor number (e.g. adding ability to log to syslog)
  • Changes that change the format of data files, whether shipped with the game, or created by the game, should increment minor until we decide we are at 1.0.0; thereafter those are probably major releases unless we can do them in a backwards-compatible fashion

practicing skills doesn't work right

As a new character, trying to practice a skill at the GuildMaster does not seem to work exactly right:

H:5 M:112 V:110 > pr bless
You practice for a while...
The Guildmaster says 'Hey, I'm not your guildmaster.  Get lost!'
Which class???
Go to your guildmaster to see the spells you don't have

The net effect is that the skill got learned, but there are some extraneous error-looking messages in here.

backstab crashed the mud?

Made a level 1 thief and was wandering around the Chessboard and ran across a mortally wounded pawn. Tried to backstab it and the game crashed. Last log line was:

Dec 29 22:55:52 ip-172-30-0-252 silly[24918]: BS multiplier for 1th level char is 4.

I'll try to replicate it locally.

RFC: move builds to GitHub Actions

Given that Travis CI changed their long-term free CI/CD hosting for open source projects back in 2020, it might be worth considering moving the build elsewhere. While the build still appears to be working, as we probably got moved to the "10k credits" plan, and as a hobby project we are not in any danger of running out of credits anytime soon, it might be long-term simpler to move things to GitHub Actions, which is free for public repositories using the GitHub-hosted runners. Plus we'd get to play with GitHub Actions. :)

extraneous output when learning at ninja master

Just learned riding from the ninja master, and got:

H:34 M:81 V:114 > pr riding
The ninja master says 'That will be 0 coins.'
The ninja master says 'We will now begin practicing.'
Which class???
Go to your guildmaster to see the spells you don't have

Despite the error message, I did successfully learn riding, though.

Some mobs have bad stat blocks

Issue:

Mobs with an S designation in tinyworld.mob should have the following format for the second line of stats according to the code in db.c:

%d %d %d %dd%d+%d %dd%d+%d

But at least a handful of them have:

%d %d %d %d %dd%d+%d

That is, the 4th stat is just a number instead of a die + bonus spec. This is causing random values to be read off the stack in db.c. It seems to work almost all of the time, shockingly, but I've seen it crash the game on occasion.

Possible fixes:

  • Change the letter to one of the other specs (e.g. 'A', 'L', ...). These types expect a single number in that location. I'm not sure what else this would change.
  • Change the code to deal with single numbers. We would need to decide what defaults make sense across the board.
  • Change the stat blocks of the offending mobs. We would need to decide what the stats should be.

Affected mobs:

There are 141 mobs with the S designation and 36 of them have this problem:

grep -A 1 'S$' tinyworld.mob | grep -v 'S$' | grep -v -- '--' | grep ' [0-9]\+ [0-9]\+d[0-9]+[0-9]\+$' | wc -l

Parallel build is broken

Something happened recently such that sometimes if you try to invoke a parallel build (make -j) it will rerun ./configure even if it isn't required. I'm sure it has something to do with the autoconf checks that happen in the beginning.

rotate production log

The game currently logs to syslog when running in daemon mode; we should figure out a configuration for rsyslogd that allows for periodic rotation/truncation of logs (and then document that in the INSTALL doc).

Howdy

I don't know how to say this via a message - but this is Loki. I meant to say hi sooner, but got distracted by the holidays, and then forgot until earlier today.

I'm super-excited you're trying to refactor it. It should be an epic adventure in its own right, heh.

good luck! Let me know if there's anything I can do to help, other than code, can't really commit to that right now.

`split` command not formatted correctly

H:36 M:63 V:96 > split 1
You keep 0 gold
You give $N 0 goldA dust devil gives you 0 gold
You give $N 0 goldKeith gives you 0 gold
And you keep the 1 gold left over.

permit logging to file instead of stdout/stderr

It'd be nice to be able to direct output to /usr/local/var/log/sillymud/XXXX so we can look at things there instead of nohup.out which is how I'm running the prod instance currently. I suspect there is probably a good C logging library/best practice that could be used here.

rent seems to overcharge

Have discovered that offer predicts I would have 0 gold/day rent, but then when I log in after renting, it says I ran up, say 81 gold in rent and I've lost my stuff ("you deadbeat").

run as daemon

Again, now that there is a production instance, it'd be good to have a command-line option to run as a daemon.

RFC: migrate from file-based persistence to a database

It seems as though some of the open bugs (e.g. #59, and I definitely cleaned up some other formatting errors in my initial efforts to get things running again) come from improperly writing (editing?) the files with something that doesn't match the (implied) schema. I think moving to some form of database would help prevent these issues (and, to be honest, probably bring good things like transactional integrity and possibly better performance).

My current thinking is to gradually migrate some--or all?--file-based storage to SQLite. It is public domain software, so we should be license-compatible by using it. Since they are simple files, distributing the databases should be just as easy as distributing the existing files.

Thoughts? If I get sufficient time and motivation, I'll just do it, but I figured I'd gather some input. ๐Ÿ˜„

segfault when accessing a numbered item

If you attempt to access a numbered item, say, by doing wield 2.hammer to wield the second hammer in your inventory, we get a segfault in get_number in handler.c.

Board messages not automatically saved after composition.

The code seems to intentionally not write to the board file after a message has been composed unless either another message is written to the board or a user gives an write command with no message subject. I can't imagine the benefit of this. A MUD shutdown doesn't force the write either.

Lack of type-checking for function pointers

Code like this exists in db.h in the definition of struct index_data. There are a few more like it in in the fight.c (damage functions) and in the iteration functions in hash.c.

/* mob special procs are:
  int (*func)(struct char_data *, int, char *, char *, int);
  obj special procs are:
  int (*func)(struct char_data *, int, char *, struct obj_data *, int);
*/
int (*func) ();

Missing mob func warning

This warning on startup should probably be addressed:

Attempting to call a non-existing mob func on valik wizened mage

should we swap out the hash table implementation?

There are 3rd party hash table implementations that are undoubtedly more battle-hardened and robust, such as the one in the Apache Portable Runtime (APR):

https://apr.apache.org/docs/apr/1.4/group__apr__hash.html

The APR is available via Homebrew as well as via yum on the production Linux box.

The idea is to have less of our own code to manage; this would also make it easier to introduce hash tables in other areas. For example, the mob and object indices likely want to be hash tables instead of a binary search array. There are also other parts of the code where a linear search though a list is done to find a particular mob, object, or character.

hacktoberfest tag

Hi there,

This project has the hacktoberfest tag, but hacktoberfest is "month-long celebration of open-source projects", while this project isn't Open Source (according to the LICENSE file it is under the original DikuMud license).

allow for multiple IP addresses/blocks in security files

For wizard security files, they can be restricted to logging in from specific IP prefixes, although it seems to be more like string prefixes. Would be better to specify these as actual IP address blocks like '8.8.8.0/24' and then to allow multiple blocks per security file.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.