mirror of
https://github.com/evennia/evennia.git
synced 2026-03-16 21:06:30 +01:00
12 KiB
12 KiB
Evennia 1.0 Release Notes
This summarizes the changes. See the Changelog for the full list.
Minimum requirements
- Python 3.10 is now required minimum. Ubuntu LTS now installs with 3.10. Evennia 1.0 is also tested with Python 3.11 - this is the recommended version for Linux/Mac. Windows users may want to stay on Python 3.10 unless they are okay with installing a C++ compiler.
- Twisted 22.10+
- Django 4.1+
Major new features
- Evennia is now on PyPi and is installable as pip install evennia.
- A completely revamped documentation at https://www.evennia.com/docs/latest. The old wiki and readmedocs pages will close.
- Evennia 1.0 now has a REST API which allows you access game objects using CRUD operations GET/POST etc. See [The Web-API docs][Web-API] for more information.
- Evennia<>Discord Integration between Evennia channels and Discord servers.
- Script overhaul: Scripts' timer component independent from script object deletion; can now start/stop timer without deleting Script. The
.persistentflag now only controls if timer survives reload - Script has to be removed with.delete()like other typeclassed entities. This makes Scripts even more useful as general storage entities. - The FuncParser centralizes and vastly improves all in-string function calls, such as
say the result is $eval(3 * 7)and say the resultthe result is 21. The parser completely replaces the oldparse_inlinefunc. The new parser can handle both arguments and kwargs and are also used for in-prototype parsing as well as director stance messaging, such as using$You()to represent yourself in a string and having the result come out differently depending on who see you. - Channels New Channel-System using the
channelcommand and nicks. The oldChannelHandlerwas removed and the customization and operation of channels have been simplified a lot. The old command syntax commands are now available as a contrib. - Help System was refactored.
- A new type of
FileHelpsystem allows you to add in-game help files as external Python files. This means there are three ways to add help entries in Evennia: 1) Auto-generated from Command's code. 2) Manually added to the database from thesethelpcommand in-game and 3) Created as external Python files that Evennia loads and makes available in-game. - We now use
lunrsearch indexing for betterhelpmatching and suggestions. Also improve the main help command's default listing output. - Help command now uses
viewlock to determine if cmd/entry shows in index andreadlock to determine if it can be read. It used to beviewin the role of the latter. sethelpcommand now warns if shadowing other help-types when creating a new entry.- Make
helpindex output clickable for webclient/clients with MXP (PR by davewiththenicehat)
- A new type of
- Rework of the Web setup, into a much more consistent structure and update to latest Django. The
mygame/web/static_overridesand-template_overrideswere removed. The folders are now justmygame/web/staticand/templatesand handle the automatic copying of data behind the scenes.app.csstowebsite.cssfor consistency. The oldprosimii-cssfiles were removed. - AttributeProperty/TagProperty along with
AliasPropertyandPermissionPropertyto allow managing Attributes, Tags, Aliases and Permissios on typeclasses in the same way as Django fields. This dramatically reduces the need to assign Attributes/Tags inat_create_objecthook. - The old
MULTISESSION_MODEwas divided into smaller settings, for better controlling what happens when a user connects, if a character should be auto-created, and how many characters they can control at the same time. See Connection-Styles for a detailed explanation. - Evennia now supports custom
evennialauncher commands (e.g.evennia mycmd foo bar). Add new commands as callables accepting*args, assettings.EXTRA_LAUNCHER_COMMANDS = {'mycmd': 'path.to.callable', ...}.
Contribs
The contrib folder structure was changed from 0.9.5. All contribs are now in sub-folders and organized into categories. All import paths must be updated. See Contribs overview.
- New Traits contrib, converted and expanded from Ainneve project. (whitenoise, Griatch)
- New Crafting contrib, adding a full crafting subsystem (Griatch)
- New XYZGrid contrib, adding x,y,z grid coordinates with in-game map and pathfinding. Controlled outside of the game via custom evennia launcher command (Griatch)
- New Command cooldown contrib contrib for making it easier to manage commands using dynamic cooldowns between uses (owllex)
- New Godot Protocol contrib for connecting to Evennia from a client written in the open-source game engine Godot (ChrisLR).
- New name_generator contrib for building random real-world based or fantasy-names based on phonetic rules (InspectorCaracal)
- New Buffs contrib for managing temporary and permanent RPG status buffs effects (tegiminis)
- The existing RPSystem contrib was refactored and saw a speed boost (InspectorCaracal, other contributors)
Translations
- New Latin (la) translation (jamalainm)
- New German (de) translation (Zhuraj)
- Updated Italian translation (rpolve)
- Updated Swedish translation
Utils
- New
utils.format_gridfor easily displaying long lists of items in a block. This is now used for the default help display. - Add
utils.repeatandutils.unrepeatas shortcuts to TickerHandler add/remove, similar to howutils.delayis a shortcut for TaskHandler add. - Add
utils/verb_conjugationfor automatic verb conjugation (English only). This is useful for implementing actor-stance emoting for sending a string to different targets. utils.evmenu.ask_yes_nois a helper function that makes it easy to ask a yes/no question to the user and respond to their input. This complements the existingget_inputhelper.- New
taskscommand for managing tasks started withutils.delay(PR by davewiththenicehat) - Add
.deserialize()method to_Saver*structures to help completely decouple structures from database without needing separate import. - Add
run_in_main_threadas a helper for those wanting to code server code from a web view. - Update
evennia.utils.loggerto use Twisted's new logging API. No change in Evennia API except more standard aliases logger.error/info/exception/debug etc can now be used. - Made
utils.iter_to_strformat prettier strings, using Oxford comma. - Move
create_*functions into db managers, leavingutils.createonly being wrapper functions (consistent withutils.search). No change of api otherwise.
Locks
- New
search:lock type used to completely hide an object from being found by theDefaultObject.search(caller.search) method. (CloudKeeper) - New default for
holds()lockfunc - changed from default ofTrueto default ofFalsein order to disallow dropping nonsensical things (such as things you don't hold).
Hook changes
- Changed all
at_before/after_*hooks toat_pre/post_*for consistency across Evennia (the old names still work but are deprecated) - New
at_pre_object_leave(obj, destination)method onObjects. - New
at_server_init()hook called before all other startup hooks for all startup modes. Used for more generic overriding (volund) - New
at_pre_object_receive(obj, source_location)method on Objects. Called on destination, mimicking behavior ofat_pre_movehook - returning False will abort move. Object.normalize_nameand.validate_nameadded to (by default) enforce latinify on character name and avoid potential exploits using clever Unicode chars (trhr)- Make
object.searchsupport 'stacks=0' keyword - if>0, the method will return N identical matches instead of triggering a multi-match error. - Add
tags.has()method for checking if an object has a tag or tags (PR by ChrisLR) - Add
Msg.db_receiver_externalfield to allowe external, string-id message-receivers. - Add
$pron()and$You()inlinefuncs for pronoun parsing in actor-stance strings usingmsg_contents.
Command changes
- Change default multi-match syntax from
1-obj,2-objtoobj-1,obj-2, which seems to be what most expect. - Split
return_appearancehook with helper methods and have it use a template string in order to make it easier to override. - Command executions now done on copies to make sure
yielddon't cause crossovers. AddCommand.retain_instanceflag for reusing the same command instance. - Allow sending messages with
page/tellwithout a=if target name contains no spaces. - The
typeclasscommand will now correctly search the correct database-table for the target obj (avoids mistakenly assigning an AccountDB-typeclass to a Character etc). - Merged
scriptandscriptscommands into one, for both managing global- and on-object Scripts. MovedCmdScriptsandCmdObjectstocommands/default/building.py. - The
channelcommands replace all old channel-related commands, such ascsetetc - Expand
examinecommand's code to much more extensible and modular. Show attribute categories and value types (when not strings).- Add ability to examine
/scriptand/channelentities withexaminecommand.
- Add ability to examine
- Add support for
$dbref()and$searchwhen assigning an Attribute value with thesetcommand. This allows assigning real objects from in-game. - Have
type/forcedefault toupdate-mode rather thanresetmode and add more verbose warning when using reset mode.
Coding improvement highlights
- The db pickle-serializer now checks for methods
__serialize_dbobjs__and__deserialize_dbobjs__to allow custom packing/unpacking of nested dbobjs, to allow storing in Attribute. See Attributes documentation. - Add
ObjectParentmixin to default game folder template as an easy, ready-made way to override features on all ObjectDB-inheriting objects easily. source location, mimicking behavior ofat_pre_movehook - returning False will abort move. - New Unit test parent classes, for use both in Evenia core and in mygame. Restructured unit tests to always honor default settings.
Other
- Homogenize manager search methods to always return querysets and not sometimes querysets and sometimes lists.
- Attribute/NAttribute got a homogenous representation, using intefaces, both
AttributeHandlerandNAttributeHandlerhas same api now. - Added
content_typesindexing to DefaultObject's ContentsHandler. (volund) - Made most of the networking classes such as Protocols and the SessionHandlers
replaceable via
settings.pyfor modding enthusiasts. (volund) - The
initial_setup.pyfile can now be substituted insettings.pyto customize initial game database state. (volund) - Make IP throttle use Django-based cache system for optional persistence (PR by strikaco)
- In modules given by
settings.PROTOTYPE_MODULES, spawner will now first look for a global listPROTOTYPE_LISTof dicts before loading all dicts in the module as prototypes. concept of a dynamically createdChannelCmdSet. - Prototypes now allow setting
prototype_parentdirectly to a prototype-dict. This makes it easier when dynamically building in-module prototypes. - Make
@lazy_propertydecorator create read/delete-protected properties. This is because it's used for handlers, and e.g. self.locks=[] is a common beginner mistake. - Change
settings.COMMAND_DEFAULT_ARG_REGEXdefault fromNoneto a regex meaning that a space or/must separate the cmdname and args. This better fits common expectations. - Add
settings.MXP_ENABLED=Trueandsettings.MXP_OUTGOING_ONLY=Trueas sane defaults, to avoid known security issues with players entering MXP links. - Made
MonitorHandler.add/removesupportcategoryfor monitoring Attributes with a category (before only key was used, ignoring category entirely).