MU Soapbox

    • Register
    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Muxify
    • Mustard
    1. Home
    2. Griatch
    3. Best
    • Profile
    • Following 0
    • Followers 1
    • Topics 23
    • Posts 375
    • Best 172
    • Controversial 0
    • Groups 2

    Best posts made by Griatch

    • I made a Python-with-Evennia tutorial (looking for feedback)

      https://github.com/evennia/evennia/wiki/Python-basic-introduction

      Since many people coming to Evennia are not previously familiar with Python (or any programming in some cases) I put together a tutorial for the absolute Python beginner that just got Evennia up and running. It explores some basic Python concepts using Evennia as well as helps the budding developer start finding their way with concepts like imports, object inheritance and overriding. After previous feedback it was split in two parts since it's pretty chunky to do in one sitting.

      Obviously a short tutorial can't do more than graze the surface of Python and general programming concepts. This won't teach you Python. But it covers some of the most common questions and initial hurdles newcomers tend to ask about in a format that is, while technical, hopefully not too hard to follow when getting started.

      If you follow it and have feedback on further improvements, let me know!
      .
      Griatch

      posted in MU Code
      Griatch
      Griatch
    • RE: Meanest (But Funniest) Thing You've Done in a Game

      Not very "mean" I guess but funny at the time:

      This was a one-shot at a convention. We played "Mutant" (Swedish RPG franchise). 1980's style post-apocalyptic with lots of intelligent mutated animals, mega corps and weirdness in a big mix. We had pre-made characters (a bunch of mercenaries) and I ended up with the intelligent bipedal bulldog. On a whim I decided that he really loved food. The way a dog gets excited about all food, except this dog is six feet tall and carries a shotgun. I got us into a lot of trouble with that one, including bypassing the clever diplomat-type and making sure the down payment for our next gig was to be in bones.

      Anyway, the whole thing concluded with us acting as security detail for a mob boss' wedding. The whole thing took place at the bottom floor of a larger building. So we make our preparations, scout the premises etc. The wedding starts and we are on high alert. Finally the enemy boss makes his move. It turns out there is some sort of aquarium higher up in the building and the enemy had planted explosives that we hadn't detected. So BOOM - tons of water floods down into the locale along with a GIANT MUTANT LOBSTER keen on eating EVERYONE (for some reason).
      Boss battle! This is a pretty lethal game with relatively detailed combat. The lobster is a really powerful enemy and people starts shooting at it with mediocre results. Someone lobs off a semi-successful grenade.

      GM: The grenade goes off! It's a hit, cracking part of the shell on the side of the monster. But even a grenade doesn't even slow it down.
      Me: Wait, there is a crack in the shell? There is exposed flesh?
      GM: ... a little, yes?
      Me: Foooood! I throw away my weapons and dive in. Face first. I'm a bulldog. My jaws a formidable.
      GM: ... Roll.

      I roll excellently, and keep doing so. And for the rest of the battle I gradually eat my way into the poor giant lobster. Lots of laughter around the table. The tension of the battle is gone at this point so the GM just gives up and embraces the farce with ever wilder descriptions. Finally the lobster falls to my hunger and we win the day. Glory and food coma in one glorious mix. Good times.
      .
      Griatch

      posted in Mildly Constructive
      Griatch
      Griatch
    • Podcast/interview about Evennia

      I was interviewed about Evennia on the (somewhat grandiously named) Titans of Text podcast the other day. It's a great initiative for the MUD Coder's Guild folks to run a pod cast like this so please support them by taking a listen. Note however that they come at this primarily from a MUD perspective rather than a MUSH one.

      Episode 4: Evennia

      posted in Adver-tis-ments
      Griatch
      Griatch
    • Evennia for MUSHers

      If you are a MUSH user interested in trying to make your next game in Evennia but are unsure where to start, this is the introduction for you! It will go through some key differences, help with the installation and then offer some first things to try out.

      On Evennia

      Evennia googly snake
      Evennia is an open-source game server and -library for developing multiplayer text-games in Python (not only MUSH, any type of MU*). When you start Evennia you’ll have a fully functioning (if empty) game that you can connect to with normal MU* clients as well as play from any modern browser - you will also get a simple website for your game.

      By default you’ll have some 90 in-game commands as well as channels, rooms, characters and other basic building blocks. Commands can be completely changed but the default administrative command syntax is somewhat reminiscent of MUX.

      Fundamental differences between MUSH and Evennia

      Apart from the features mentioned above, Evennia works quite differently from a MUSH under the hood. Here are some fundamental differences to keep in mind.

      Developers vs Players

      In MUSH, users tend to code and expand all aspects of the game from inside it. A MUSH can thus be said to be managed solely by Players with different levels of access. Evennia on the other hand, differentiates between the role of the Player and the Developer.

      • An Evennia Developer works in Python from outside the game, in what MUSH would consider “hardcode”. Developers implement larger-scale code changes and can fundamentally change how the game works. They then load their changes into the running Evennia server. Such changes will usually not drop any connected players.
      • An Evennia Player operates from inside the game. Some staff-level players are likely to double as developers. Depending on access level, players can modify and expand the game's world by digging new rooms, creating new objects, alias commands, customize their experience and so on. Trusted staff may get access to Python via the @py command, but this would be a security risk for normal Players to use. So the Player usually operates by making use of the tools prepared for them by the Developer - tools that can be as rigid or flexible as the developer desires.

      Collaborating on a game - Python vs Softcode

      For a Player, collaborating on a game need not be too different between MUSH and Evennia. The building and description of the game world can still happen mostly in-game using build commands, using text tags and inline functions to prettify and customize the experience. Evennia offers external ways to build a world but those are optional. There is also nothing in principle stopping a Developer from offering a softcode-like language to Players if that is deemed necessary.

      For Developers of the game, the difference is larger: Code is mainly written outside the game in Python modules rather than in-game on the command line. Python is a very popular and well-supported language with tons of documentation and help to be found. The Python standard library is also a great help for not having to reinvent the wheel. But that said, while Python is considered one of the easier languages to learn and use it is undoubtedly very different from MUSH softcode.

      While softcode allows collaboration in-game, Evennia's external coding opens up for sharing using professional version control tools and bug tracking using websites like github (or bitbucket for a free private repo). Source code can be written in proper text editors and IDEs with refactoring, syntax highlighting and all other conveniences. In short, collaborative development of an Evennia game is done in the same way most professional collaborative development is done in the world, meaning all the best tools can be used.

      @parent vs @typeclass and @spawn

      Inheritance works differently in Python than in Softcode. Evennia has no concept of a "master object" that other objects inherit from. There is in fact no reason at all to introduce "virtual objects" in the game world - code and data are kept separate from one another.

      In Python (which is an object oriented language - read the wikipedia article for the advantages of this) one instead creates classes - these are like blueprints from which you spawn any number of object instances. Evennia also adds the extra feature that every instance is persistent in the database (this means no SQL is ever needed). To take one example, a unique character in Evennia is an instances of the class Character.

      One parallel to MUSH's @parent command may be Evennia's @typeclass command, which changes which class an already existing object is an instance of. This way you can literally turn a Character into a Flowerpot on the spot.

      if you are new to object oriented design it's important to note that all object instances of a class does not have to be identical. If they did, all Characters would be named the same. Evennia allows to customize individual objects in many different ways. One way is through Attributes, which are database-bound properties that can be linked to any object. For example, you could have an Orc class that defines all the stuff an Orc should be able to do (probably in turn inheriting from some Monster class shared by all monsters). Setting different Attributes on different instances (different strength, equipment, looks etc) would make each Orc unique despite all sharing the same class.

      The @spawn command allows one to conveniently choose between different "sets" of Attributes to put on each new Orc (like the "warrior" set or "shaman" set) . Such sets can even inherit one another which is again somewhat remniscent at least of the effect of @parent and the object-based inheritance of MUSH.

      There are other differences for sure, but that should give some feel for things. Enough with the theory. Let's get down to more practical matters next.

      Getting Evennia running

      Evennia runs on Linux/Unix, Windows and Mac. Most of the install is handled automatically but you must be familiar with the Linux/Mac terminal or the Windows console. The full install instructions (and explanations of each step) are found on the Evennia Getting Started page - look there if you run into trouble.

      1. Install Python, python-virtualenv and GIT in the way recommended by your OS. On a Debian-derived Linux (Ubuntu etc), you can do sudo apt-get install python python-dev git python-virtualenv. After this you should not need to be root/admin anymore.
      2. Create a new folder, say mud-dev, somewhere - for example in your home directory on Linux/Mac or in My Documents on Windows.
      3. Open the terminal/console and cd to the mud-dev folder. You'll stay in here from now on.
      4. Enter virtualenv pyenv - a new folder pyenv will appear. The virtualenv program allows you to install Python libraries in the pyenv folder without affecting other things on your system - it's a standard Python practice.
      5. Enter source pyenv/bin/activate (Linux/Mac) or pyenv\Scripts\Activate (Windows). This activates the virtualenv. You see that it works if the text (pyenv) appears next to the command prompt. You need to call this command every time you open a new terminal to get access to the stuff you install in the virtualenv below.
      6. git clone https://github.com/evennia/evennia.git - a new directory evennia will appear; this holds the actual Evennia code.
      7. pip install -e evennia - installs Evennia to the virtual environment. You should now have the evennia command available - try it! If there are any hick-ups, look here for linux-, mac- and windows troubleshooting respectively.
      8. Enter evennia --init mygame - this will create a new folder mygame (or whatever you choose to call it) where we’ll create our new game.
      9. cd mygame
      10. evennia migrate - this will create the database.
      11. evennia start - the server starts. You can now telnet to it on localhost, port 4000 or in your browser on http://localhost:8000.

      Welcome to Evennia! If you want to toy around you can get some first pointers in the "Next Steps" section last in this how-to. Take a moment to try things out, maybe build the tutorial world as instructed in the first room. Some things will look familiar, other things not, we’ll start addressing that in the next section.

      A first step making things more familiar

      We will here give two examples of customizing Evennia to be more familiar to a MUSH Player.

      Activating a multi-descer

      By default Evennia’s desc command updates your description and that’s it. There is a more feature-rich optional “multi-descer” in evennia/contrib/multidesc.py though. This alternative allows for managing and combining a multitude of keyed descriptions.

      To activate the multi-descer, cd to your game folder and into the commands sub-folder. There you’ll find the file default_cmdsets.py. In Python lingo all *.py files are called modules. Open the module in a text editor. We won’t go into Evennia in-game Commands and Command sets further here, but suffice to say Evennia allows you to change which commands (or versions of commands) are available to the player from moment to moment depending on circumstance.

      Add two new lines to the module as seen below:

      # the file mygame/commands/default_cmdsets.py
      # [...] 
      
      from evennia.contrib import multidescer   # <- added now
      
      class CharacterCmdSet(default_cmds.CharacterCmdSet):
          """
          The CharacterCmdSet contains general in-game commands like look,
          get etc available on in-game Character objects. It is merged with
          the PlayerCmdSet when a Player puppets a Character.
          """
          key = "DefaultCharacter"
      
          def at_cmdset_creation(self):
              """
              Populates the cmdset
              """
              super(CharacterCmdSet, self).at_cmdset_creation()
              #
              # any commands you add below will overload the default ones.
              #
              self.add(multidescer.CmdMultiDesc())      # <- added now 
      # [...]
      

      Note that Python cares about indentation, so make sure to indent with the same number of spaces as shown above!

      So what happens above? We import the module evennia/contrib/multidescer.py at the top. Once imported we can access stuff inside that module using full stop (.). The multidescer is defined as a class CmdMultiDesc (we could find this out by opening said module in a text editor). At the bottom we create a new instance of this class and add it to the CharacterCmdSet class. For the sake of this tutorial we only need to know that CharacterCmdSet contains all commands that should be be available to the Character by default.

      This whole thing will be triggered when the command set is first created, which happens on server start. So we need to reload Evennia with @reload - no one will be disconnected by doing this. If all went well you should now be able to use desc (or +desc) and find that you have more possibilities:

      > +desc eyes = His eyes are blue. 
      > +desc basic = A big guy.
      > +desc/set basic + + eyes    # we add an extra space between
      > look me
      A big guy. His eyes are blue.
      

      (See also help +desc). If there are errors a traceback will show in the server log - several lines of text showing where the error occurred. Find where the error is by locating the line number related to the default_cmdsets.py file (it's the only one you've changed so far). Most likely you mis-spelled something or missed the indentation. Fix it and either @reload again or run evennia start as needed.

      Customizing the multidescer syntax

      As seen above the multidescer uses syntax like this (where |/ are Evennia's tags for line breaks) :

      > +desc/set basic + |/|/ + cape + footwear + |/|/ + attitude 
      

      This use of + was prescribed by the Developer that coded this +desc command. What if the Player doesn’t like this syntax though? Do players need to pester the dev to change it? Not necessarily. While Evennia does not allow the player to build their own multi-descer on the command line, it does allow for re-mapping the command syntax to one they prefer. This is done using the nick command.

      Here’s a nick that changes how to input the command above:

      > nick setdesc $1 $2 $3 $4 = +desc/set $1 + |/|/ + $2 + $3 + |/|/ + $4
      

      The string on the left will be matched against your input and if matching, it will be replaced with the string on the right. The $-type tags will store space-separated arguments and put them into the replacement. The nick allows shell-like wildcards, so you can use *, ?, [...], [!...] etc to match parts of the input.

      The same description as before can now be set as

      > setdesc basic cape footwear attitude 
      

      With the nick functionality players can mitigate a lot of syntax dislikes even without the developer changing the underlying Python code.

      Next steps

      If you are a Developer and are interested in making a more MUSH-like Evennia game, a good start is to look into the Evennia Tutorial for a first MUSH-like game. That steps through building a simple little game from scratch and helps to acquaint you with the various corners of Evennia. There is also the Tutorial for running roleplaying sessions that can be of interest.

      An important aspect of making things more familiar for Players is adding new and tweaking existing commands. How this is done is covered by the Tutorial on adding new commands. You may also find it useful to shop through the evennia/contrib/ folder. The Tutorial world is a small single-player quest you can try (it’s not very MUSH-like but it does show many Evennia concepts in action). Beyond that there are many more tutorials to try out. If you feel you want a more visual overview you can also look at Evennia in pictures.

      … And of course, if you need further help you can always drop into the Evennia chatroom or post a question in our forum/mailing list!

      posted in How-Tos
      Griatch
      Griatch
    • RE: Getting Young Blood Into MU*'ing

      This thread has focused heavily on players. Rightly so - getting new players is of course very important.

      But as one member of the comparably small clique of server-developers in here, let me add a brighter (if of course anecdotal) note and say that there is actually an influx of new developer blood coming into the hobby too. In the Evennia support channel I get to greet new faces all the time.

      Many of these new people of course have an existing background in different genres of MU-dom: They want to make their own twitchy MUD, the next Arx or the next great MUSH-style game. Some are new only because they played MUDs 30 years ago and had forgotten about them until now.

      But in this constant trickle of newcomers are also fresh faces; people wanting to learn to program or to make a game and having found out about MU thinks that it's just the ticket. Some of them are in-parallel playing their first MU and are seeing the possibilities for their own creations. Admittedly, MUs are not always the goal - some want to use the medium for educational games, children games or even to connect over something with their kids. Others want to learn game development in general or to use this experience as a stepping-stone towards becoming a professional programmer or game dev. But regardless of their motivation, they are still all pouring their creativity into creating MU-related code.

      Many - most - of these fresh-faced devs will not create something you can ever play. But that doesn't change the fact they keep trickling in, that they are creating and that they are trying.

      I think that's worthy of some optimism, at least.

      posted in Mildly Constructive
      Griatch
      Griatch
    • Evennia 0.8 released

      alt texthttps://evennia.blogspot.com/2018/09/evennia-08-released.html

      After a year of work and some 540 commits from almost 20 contributors, Evennia version 0.8 is out!

      Enjoy!
      .
      Griatch

      posted in MU Code
      Griatch
      Griatch
    • Evennia 0.9.5 released!

      evennia screenshot
      top left: Evennia server running. Top right: Default website. Bottom left: HTML5 webclient. Bottom right: Telnet client (tintin++).

      Evennia is a Python MUD/MU* creation library and framework. This is an intermediary release, leading up to the future v1.0. If you have followed the Evennia master branch, this will not be much change code-wise, but compared to 0.9, there are a lot of new features, fixes and improvements!

      The main feature is otherwise on the 'meta' level in that we have moved to a static documentation and have overhauled evennia.com.

      Check out the dev blog post for more details: http://evennia.blogspot.com/2020/11/evennia-095-released.html

      posted in Adver-tis-ments
      Griatch
      Griatch
    • RE: Arx on github

      I have put together a step-by-step instruction for installing and running this open-source version of Arx (as of Aug 12, 2018) with latest master-branch Evennia. I make some minor changes to have it comply with latest Evennia structure. Hope it can be of use and thanks again to Tehom for releasing the sources!

      https://github.com/evennia/evennia/wiki/Arxcode-installing-help

      posted in MU Code
      Griatch
      Griatch
    • Evennia 0.7 is out

      Evennia 0.7 was just released. Evennia is a MU* creation library in Python. People here on MU soapbox might be most familiar with it being the engine running Arx.

      There are a ton of updates and fixes. Many are technical and of more interest to those already into Evennia; here are some of more general interest:

      • Evennia separates Player objects from Character objects in that the former is an OOC entity that can puppet one or more of the latter. The name Player was a source of some confusion since this is used differently in other code bases. Player has now been renamed to Account to make its function clearer.
      • Evennia's in-built website now uses our own theme and bootstrap under the hood to make it easier to modify as well as rescale it better on mobile devices (webclient is not updated at this point).
      • Shared logins between webclient and website, with the ability to log out of each independently of the other if so desired.
      • Prefix-ignoring - All default commands are now renamed without their @-prefixes. Both @examine, +examine or examine will now all point to the same command. You can customize which prefixes Evennia simply ignores when searching for a command. The mechanic is clever though - if you create a command with a specific key "+foo", then that will still work and won't clash with another command named just "foo". This idea was borrowed from @faraday's Ares system.
      • Easy pause mechanisms using yield statements directly in Command code (just do yield 10 in your command code to have it pause ten seconds without blocking anyone else). You can also do retval = yield "Do you want to accept?" and have the command pause (non-blocking) for the player's input before continuing.

      New contribs (optional plugins) (selection, new since 0.6 but many have been available on master branch for a while):

      • The optional In-Game-Python contrib by Vincent le Geoff might be of interest to people here. It allows for coding and scripting in-game using full-fledged Python to make events and triggers. It's not a safe softcode-style language (you have the full power of Python which is not good for untrusted users) but is intended for trusted builders to make complex scripting from the command line.
      • Wilderness/maps - Creation of dynamic or static maps based on ascii-maps for dynamically creating rooms and to show when moving around. (titeuf87, Cloud Keeper)
      • Full turn-based combat system, meant to expand for a desired system (battlejenkins)
      • Alternative Unix-style command base for Evennia, for those that prefer to enter commands like you do on the unix command line (with --flags etc) (Vincent le Geoff)
      • Multidescer, which together with Evennia's nick replacement system can be heavily customized in-game (me).
      • Mail - a @brandymail-style in-game mail-system (grungies1138)
      • Clothing system, for layered outfits adding to the wearer's desc when worn (battlejenkins).

      ... And much more. See the release post on the Evennia mailing list for gritty details.
      .
      Griatch

      posted in Adver-tis-ments
      Griatch
      Griatch
    • Blog post about inline building in upcoming Evennia 0.8

      https://evennia.blogspot.com/2018/08/inline-building-in-upcoming-evennia-08.html

      This might be of interest to those using Evennia for their projects.
      .
      Griatch

      posted in MU Code
      Griatch
      Griatch
    • Evennia 0.6 released

      Evennia is a MU* development system and server in Python.

      As of today, Evennia's "wclient" development branch merged, making me feel like ramping up the version number to the pretty arbitrary 0.6.

      This update concludes a lengthy overhaul of Evennia's HTML5 web client infrastructure, notably standardizing all commands between the server and client as well as splitting the javascript code into two - one javascript library handles all communication to the Evennia server and the other the frontend UI. The communication library will transparently downgrade the connection to AJAX/COMET long polling if the player uses a browser that can't handle websockets. This library offers events and hooks for the front-end to make use of. This split makes it easier to replace the default gui with a ui library of your own choice while not needing to worry about the server communication details. Thanks to @Glitch for offering excellent ideas and examples for the redesign of this!

      0_1463953101920_evennia_screen.png

      The default webclient gui is still mimicking a straightforward but stable "telnet-like" interface. So by default it matches what you see using the other types of client connections Evennia accepts in parallel (traditional telnet, telnet+SSL and SSH).

      Other changes involve expanded flexibility and functionality for having your client ask for all sorts of things from the server, or telling the server to report various state changes (like the client asking the server to report whenever a health attribute changes so it can update a health bar or flash the screen). On the server side, this is done by simply defining a normal function with the name (and arguments) of the client instruction you want to accept.

      There are a bunch of further changes that are interesting to those familiar with, or is already using, Evennia. More info, along with update instructions, is covered in this post on the Evennia mailing list.
      .
      Griatch

      posted in Adver-tis-ments
      Griatch
      Griatch
    • Evscaperoom - a full playable multiplayer 'escape room' in Evennia with a layered story and multiple endings!

      Don't let her get all the pies!
      Don't let her get all the pies!

      https://itch.io/jam/enterthemud2/rate/422945 - please play, comment and rate

      • Update: No need for rating anymore, Evscaperoom won the game jam!.
      • Update2: The full Evscaperoom is now available to play from https://demo.evennia.com (or telnet to demo.evennia.com, port 4000). Just log in and enter evscaperoom from the first room to start!

      You can play both in the browser as well as connect to the game with a traditional MU* client. Do check out the other entries of the Jam as well.

      For once I can announce something other than engine- and server-related news! This is a full little game. Solve the escape-room either on your own or team up with your friends and collaborate. The game has quite an intricate story (maybe unexpectedly so), multiple endings and creepy monkeys! And pies. Lots of pies.

      This is a game jam entry (run by the MudCoder's guild), created in less than a month. The theme for the jam was One Room. It implements a full text-based, multi-player 'escape room' in Python, with a whole custom point-and-click-but-in-text game engine I wrote on top of Evennia for it (Evennia, being a Python MU*-creation library, is perfect for this kind of thing).

      The source code for the whole thing is available on github (follow the link) but I'll likely extract the engine-part and make it into an Evennia contrib in the future.

      Comments and feedback is appreciated! Enjoy!
      .
      Griatch

      Edit: Some screenshots because why not:
      login

      help

      options

      fireplace

      posted in Adver-tis-ments
      Griatch
      Griatch
    • RE: Evscaperoom - a full playable multiplayer 'escape room' in Evennia with a layered story and multiple endings!

      Looks like Evscaperoom won the game jam! Woo!
      Not a huge field of competitors, alas, but still.

      posted in Adver-tis-ments
      Griatch
      Griatch
    • Evennia 0.9 released

      Evennia 0.9 - June 2019

      As of today, version 0.9 of Evennia, the Python MU-creation system is out!

      Jump to the bottom of this post to see upgrade/install instructions.

      This is a rather big release that marks a few important milestones. See
      the changelog
      for more details.

      We drop support for Python2. Evennia now requires at least Python 3.7

      This has been a long time coming. Python2 reaches the end of its upstream
      support at the end of this year. This means that existing game code needs to
      convert to use Python3.7 as well. For most users, this should hopefully not
      be more than an afternoon's work.

      As part of this, we also updated our dependecy versions to match. We are now
      also using the more modern and well-supported Autobahn for webclient support
      (removing the old tmwx library).

      A new webclient UI, using the golden-layout library

      This makes for a much slicker and faster webclient UI. It allows tabs as well
      as click-and-drag of panes. A player can now drag and re-arrange window panes
      as desired, assigning message-types to each pane (like having 'look' output in
      one window and tells in another etc).

      The webclient can also now have any number of input panes, organized and placed
      anywhere on the screen (or tabbed). Each input pane has its own separate
      history.

      Support for Grapevine

      Grapevine is a inter-MUD chat network (https://grapevine.haus). In the same
      vein as for IRC, Grapevine channels can be linked to Evennia in-game channels
      and allow for players to communicate between MUDs.

      The Evennia Game Index now a part of Core

      The client for the Evennia Game Index (originally created by Greg Taylor) was
      moved from being a contrib to being a part of the core. This means it's
      configured not as a server plugin anymore (remove this from the
      mygame/server/conf/server_services_plugins.py if you used it before)

      The new evennia connections wizard will help to set up your game for the game
      index. For now, that's all the wizard does, maybe it will be expanded in the
      future.

      We have also changed the policy a little for the index. You may now list your
      game even if you are not allowing any external players on it yet - just leave
      your telnet/webclient links empty. This allows for very early concept games to
      tell us they exist and potentially make us excited about what to come!

      No more @ in default command names

      We have now dropped the @-prefix from all default commands. So @dig is now
      written as dig in help files etc. Evennia will however ignore several common
      prefixes by default, so you can still write @dig (or +dig) if you prefer.
      And if you explicitly give your command a key starting with @, it will still
      be required, same as now.

      Django standard initiative

      User strikaco has made a series of contributions to make it easier to link
      Evennia typeclasses to Django forms and generic/admin views. This makes it
      easier to build and extend functionality to access resources from a future
      website.

      Several utilities that before were located in default Commands (like creating
      a new character or verifying a password) is now found as helper methods on
      the base typeclasses.

      Signal handlers

      A series of new Django signals now fire for various important event:
      Puppet/Unpuppet, Object create/rename, Login/Logout, Login fails, Account
      create/rename etc. This allows code to plug into the server from anywhere
      in situations where overriding hooks would be less cumbersome. (PRs by Volund).

      Global Scripts

      One can now specify (in settings) global scripts that should always be available. These can
      always be found as properties on the evennia.GLOBAL_SCRIPTS container. (PR by
      Volund).

      Generic Player Options

      The player-options have been partially converted to use a generic format with
      validation. This is specifically used for styling information, and allow e.g.
      a player to specify how EvTables are displayed to them (like changing the
      colors and symbols used). (PR by Volund).

      As part of this, Commands have new helper methods client_width and
      styled_table/header/separator/footer for producing various text decorators
      that are then aware of whatever options the user has set.

      Interactive decorator

      The new @interactive decorator makes it easier to do asynchronous programming
      without needing to use Twisted deferreds and Callbacks. Here is an example:

      from evennia.utils import interactive
      
      @interactive
      def myfunc(caller): 
          caller.msg("First message")
          yield(5)
          caller.msg("Five seconds later")
      
          resp = yield("Write something")
          caller.msg(f"You wrote '{resp}'")
      

      This will will echo a text, wait 5 seconds, echo something else and then ask
      the user for input. All asynchronously without affecing other players. This was
      always possible using call_async, but this style should be easier to read.

      Evscaperoom engine

      Evscaperoom is a full puzzle engine for making multiplayer 'escape rooms' in
      Evennia. This is the engine I created for my entry to the MUD-Coder's Guild
      2019 Game Jam.

      Other

      • Spawner was updated
      • Simplified Chinese translations (by MaxAlex).
      • Lots of Bug fixes

      More detailed info is found in the CHANGELOG.md file.

      Install / Upgrading

      You need to install Python3.7 for your system.

      If you are installing from scratch

      Once you have Python3.7, use the Getting Started Instructions in the wiki.

      Updating an existing game

      Make sure to stop Evennia completely (evennia stop) before you pull the
      latest Evennia version (once Evennia is updated to Py3, the old code will
      fail to stop, if so, manually kill the twistd processes on your machine).

      To be extra safe, make sure to make a copy of your entire game dir.

      If you use a virtualenv (highly recommended), you need to create a new one
      with Python3.7. Deactivate the old one and delete (or rename) the old evenv
      virtualenv folder. Then install Evennia in it with as usual with

      pip install -e evennia

      You should see Evennia 0.9 being installed along with py3 versions of all
      dependencies.

      Most likely you'll need to modify your game dir to change the old Py2 code to
      Py3. You can try using the 2to3 program:

      pip install 2to3

      This should make the 2to3 command directly available in your terminal (make sure
      to backup your game dir first!)

      cd mygame
      2to3 .

      This will go through your game dir and modify the code to be compatible with
      python3. This should handle most differences but you may still need to look
      carefully at the changes to make sure it does what you expect. The most common
      things a regular Evennia dev will need to change are:

      • print txt must now be written as print(txt). The 2to3 should handle
        all of these.
      • mydict.items(), .values() and .keys() now return generators rather
        than listsk. The 2to3 program will likely wrap these in list() to mimic
        the old behavior. This works, but you should consider removing these if you
        are only iterating over the result, having a generator is faster for that.

      When you are satisfied, try

      evennia migrate

      If this fails, you may need to fix some other Py3 conversion. You can find more
      info here: https://docs.python.org/3/howto/pyporting.html Continue until the
      migrations pass. Once they do, try evennia start --log and make sure the server
      starts fully and that the game works correctly.

      What now?

      Now begins a period of bug fixing in the master (0.9) branch. If you like
      bleeding edge and used to follow the develop branch, you are best off
      switching to master right now since that will be the most updated one for a
      while.

      If you find any issues, report them to the issue tracker https://github.com/evennia/evennia/issues.

      Most of the docs have been updated, but there is no doubt going to be some
      things still lagging behind or things not yet properly documented. Please
      report/fix that when you come upon it.

      Enjoy!
      Griatch

      posted in Adver-tis-ments
      Griatch
      Griatch
    • RE: What to do when your mush is attacked

      @Ashen-Shugar asked me to supply a similar list for Evennia. Note that all of these commands could also be prepended with @, + etc if desired.

      who -- (as admin) Find the IP of a account. Note that one account can be connected to from multiple IPs depending on what you allow in your settings.
      examine/account thomas -- Get all details about an account. Can also use *thomas to get the account. If not given, you will get the Object thomas if it exists in the same location, which is not what you want in this case.
      boot thomas -- Boot all sessions of the given account name.
      boot 23 -- Boot one specific client session/IP by its unique id.
      ban -- List all bans.

      +----+---------------+--------------------------+--------+
      | id | name/ip       | date                     | reason |
      +~~~~+~~~~~~~~~~~~~~~+~~~~~~~~~~~~~~~~~~~~~~~~~~+~~~~~~~~+
      | 1  | 134.233.2.111 | Thu Dec  7 19:13:13 2017 |  Spam  |
      +----+---------------+--------------------------+--------+
      
      

      ban thomas -- Ban the user with the given account name
      ban/ip 134.233.2.111 -- Ban by IP
      ban/ip 134.233.2.* -- Widen IP ban
      ban/ip 134.233.*.* -- Even wider IP ban
      unban 34 -- Remove ban with id #34

      cboot mychannel = thomas -- Boot a subscriber from a channel you control
      clock mychannel = control:perm(Admin);listen:all();send:all() -- Fine control of access to your channel using lock definitions.

      Locking a specific command (like page) is accomplished like so:

      1. Examine the source of the command. The default page command class has the lock string "cmd:not pperm(page_banned)". This means that unless the player has the 'permission' "page_banned" they can use this command. You can assign any lock string to allow finer customization in your commands. You might look for the value of an Attribute or Tag, your current location etc.
      2. perm/account thomas = page_banned -- Give the account the 'permission' which causes (in this case) the lock to fail.

      perm/del/account thomas = page_banned -- Remove the given permission

      tel thomas = jail -- Teleport a player to a specified location or #dbref
      type thomas = FlowerPot -- Turn an annoying player into a flower pot (assuming you have a FlowerPot typeclass ready)
      userpassword thomas = fooBarFoo -- Change a user's password
      delaccount thomas -- Delete a player account (not recommended, use ban instead)

      server -- Show server statistics, such as CPU load, memory usage and how many objects are cached
      time -- Gives server uptime, runtime etc
      reload -- Reloads the server without disconnecting anyone
      reset -- Restarts the server, kicking all connections
      shutdown -- Stops the server cold without it auto-starting again
      py -- Executes raw Python code, allows for direct inspection of the database and account objects on the fly. For advanced users.

      Below are server setttings that may be of use. These are changed in mygame/server/conf/settings.py and require a server reload.

      LOCKDOWN_MODE = True -- This will turn the server into isolation mode, disabling all external connections. Useful if you need to run it to debug/test some security issue before letting others on.
      MAX_CONNECTION_RATE -- Limit how many connection attempts per second the portal should accept before starting to drop connections. This is a global value, for all IPs.
      MAX_COMMAND_RATE -- How many commands per second a Session may send. Note that this also includes Out-Of-Band messages between client<->server, so should not be set too low for games using OOB.
      MAX_CHAR_LIMIT -- Limit how many characters can be sent in one command.
      IN_GAME_ERRORS -- This will show tracebacks in the game when they happen rather than just log them and give a generic error message to the player. While very useful for development, this could be considered a vulnerability since it reveals a lot about the underlying code to the player.
      GUEST_ENABLED -- Turn on/off guest access.
      PERMISSION_GUEST_DEFAULT -- Which permission levels given to new guests.
      GUEST_HOME -- Change guests' home location.
      GUEST_START_LOCATION -- Change where guests start when logging in.
      DEBUG -- This mode will show full tracebacks in the browser on HTTP errors etc. Don't use this in production, it's leaking memory like crazy (by design it stores everything).

      posted in Mildly Constructive
      Griatch
      Griatch
    • Kicking into gear from a distance

      Kicking into gear from a distance
      http://evennia.blogspot.se/2018/01/kicking-into-gear-from-distance.html

      This post discusses the new way to manage the running Evennia server in development compared to how it works today. It might be of interest to those who likes to know how things work under the hood or are into server/infrastructure-development in general!
      .
      Griatch

      posted in MU Code
      Griatch
      Griatch
    • Evennia development blog Sept 2019

      Some updates on the current state of Evennia development, including some nifty pictures of the webclient's new image support and the third-party Unreal Engine Evennia plugin (!).

      webclient with image support
      Unreal Evennia plugin

      http://evennia.blogspot.com/2019/09/blackifying-and-fixing-bugs.html

      posted in Adver-tis-ments
      Griatch
      Griatch
    • TODO-list for upcoming Evennia 0.7

      For those that are interested and want to keep in touch with the Evennia MU* development system progress, we recently opened a new devel branch for features that will eventually be released as Evennia 0.7. You can check out the project progress page here for details. Some of the points are pretty technical but others (like the prefix-ignoring inspired by @faraday's Ares) may still be interesting to Evennia devs in general. Not the least because some of the todo-points will lead to API changes.
      The devel branch is not considered stable yet and there is no time frame for its merger at this point. Normal bug fixes etc will keep happening in master for now.

      In other news, Evennia recently increased its unit test coverage above 50%. Still a way to go and it may not be all that relevant to the average mu player, but it warms my developer heart. 🙂
      .
      Griatch

      posted in MU Code
      Griatch
      Griatch
    • RE: The Death Of Telnet: Is It Time To Face The Music?

      @rnmissionrun said in The Death Of Telnet: Is It Time To Face The Music?:

      Evennia has been around for 11 years. I would hardly call that 'young'.

      People have been putzing around with it for 11 years, yet it's still on a 0.7 beta release and the first real games only seem to have hit in 2016. @Griatch can comment on its status further, but as far as I can tell it's very much still in development.

      I would personally say that while the Evennia codebase is 11 years now, it was a very different thing initially. In its current recognizable form it has been around for something like 7 years or so. It's certainly possible to make production-ready games with it (as Arx exemplifies) but it's still very much in active development. As for the version number we didn't even have a versioning scheme until two years back or so, so we've been pretty slow with increasing those. I would like to see more advanced web integration before we move up to something like v1.0.

      ETA: Ares, incidentally, is also 11 years old. I started fiddling around with it back in 2006. And it's not done either.

      I didn't know that. 🙂 But it does go to show how much work is involved in things like this and how long time it takes when development only happens in one's free time.
      .
      Griatch

      posted in Mildly Constructive
      Griatch
      Griatch
    • RE: Development Thread: Sacred Seed

      Good luck with the game, @Cobaltasaurus, @coin (and others?)!

      The story and world concept looks fun and interesting!

      Since I develop Evennia, which Arx is based on, I tend to first look at game projects more from the technical side than from the player/world-building side.
      I don't know where you are with the actual code-creation of the game (or if you are solely at the planning/world building phase) at this point. However, since you are new to Evennia/Python, I suggest starting early to consider how to technically build the coded systems you make plans for - make an inventory (ever so sketchy) over what can be borrowed/adopted from Arx and what cannot, for example. See if there are tutorials for particular concepts. Ask specifics in the Evennia support channels.
      At a given level of coding experience some things may turn out to be pretty easy to do, other things less so - that can lead to changing your priorities for your first release.

      You have a lot of base help from Tehom's Arx codebase now that it's released as open source. But Arx is still a very different game from what you have in mind, I'd wager. So getting familiar with 'vanilla' Evennia (by asking, reading docs and doing a tutorial or four) will be useful also if you plan to mainly work from Arx' template.

      ... Just some suggestions on the code side. If you need Evennia help, don't be shy to drop into the Evennia support forums or IRC/Discord (can ask here too, but I don't check here as often). We have plenty of people learning their way around Python while working on their games. 🙂
      .
      Griatch

      posted in Game Development
      Griatch
      Griatch
    • 1
    • 2
    • 3
    • 4
    • 5
    • 8
    • 9
    • 1 / 9