Commit graph

180 commits

Author SHA1 Message Date
Griatch
e965830735 Made the reload mechanism fully asynchronous. Work on improving cache operations. 2011-03-20 13:24:07 +00:00
Griatch
857b253a6f Added the holds() lock function to check for an name or id held in inventory. 2011-03-20 10:22:21 +00:00
Griatch
a429047452 Fixed a bug in @set that would not display attributes if they were set to 0 or None. 2011-03-20 01:19:05 +00:00
Griatch
7600892d5d Fixed a bug in examine. Gave a more informative error message from asynchronous reload. 2011-03-19 23:56:24 +00:00
Griatch
2f78bacd97 Added a check for multiple connected sessions to avoid moving disconnected object more than once. Resolves issue 145. 2011-03-19 22:17:00 +00:00
Griatch
de28b2d575 Fixes @locks to block self-escalation. Fixed a few bugs in @reload that caused it to reload also unsafe modules. 2011-03-17 22:28:30 +00:00
Griatch
bccd84e480 Fixed some bugs in the access system. Changed the "owner" default permission to "control" instead to more general. Added a new hook for setting locks for objects (the suspicion was that this would give lots of grief to newbies otherwise, now we have a lockdown policy in the absence of lock definitions). 2011-03-17 21:43:18 +00:00
Griatch
295a82cc04 @locks command bug fixed; Had forgotten a 'not' in the lock-check, reversing the result. 2011-03-16 07:16:32 +00:00
Griatch
08b3de9e5e OBS: You'll need to resync/rebuild your database!
- This implements an updated, clearer and more robust access system. The policy is now to lock that which is not explicitly left open.
- Permission strings -> Lock strings. Separating permissions and locks makes more sense security-wise
- No more permissiongroup table; permissions instead use a simple tuple PERMISSIONS_HIERARCHY to define an access hierarchy
- Cleaner lock-definition syntax, all based on function calls.
- New objects/players/channels get a default security policy during creation (set through typeclass)

As part of rebuilding and testing the new lock/permission system I got into testing and debugging several other systems, fixing some
outstanding issues:
- @reload now fully updates the database asynchronously. No need to reboot server when changing cmdsets
- Dozens of new test suites added for about 30 commands so far
- Help for channels made more clever and informative.
2011-03-15 16:08:32 +00:00
Griatch
cd1c415711 Edited the help-category of utility commands to make wiki auto-command-help match. 2011-03-03 16:50:27 +00:00
Griatch
e094a4d173 Fixed a test suite syntax error in command testing. 2011-02-28 00:34:03 +00:00
Griatch
9dcfea5971 Resolves issue 133. Added the location keyword to the ObjectDB.search() method for easier customizable object searches. 2011-02-27 22:55:42 +00:00
Griatch
2bdaf034c8 OBS: You need to resync your database! The Nickname system is now a separate database model with the result that also channel nicks are more robust. Also nickname replacement has been adjusted to fix some exceptional circumstances. Fixed a host of issues in the channel and nick handlers and adjoining commands that caused the channel-syscommands to fail in some situations. Resolves issue131. Resolves issue 132. Resolves issue 134. 2011-02-27 22:27:56 +00:00
Griatch
ef59b97881 Expanded command test-suite functionality and added basic testing methods for commands in "System" category. 2011-02-21 17:47:02 +00:00
Griatch
5464487c93 Server module should be accessed through proxy, i.e. through the sessionhandler, at all times. Resolves issue 127. Script updates made @ps non-compatible, fixed the formatting. Resolves issue 128. 2011-02-21 12:56:44 +00:00
Griatch
923b9ac2ec Added hooks at_pre_cmd() and at_post_cmd() for easy implementation of stuff like prompts.
Added obj.exit property to objects for easily finding all exits from a room.
2011-02-14 17:18:31 +00:00
Griatch
45941e0c69 Implemented typeclass deleting; you can now do del obj.testval and expect the underlying attribute to be safely deleted from the database. Also fixed some reference errors when assigning to db/ndb properties on objects. Resolves issue 116. Fixed a bug in the command-testing system, so the few command tests that are defined should all work now. 2011-02-05 18:06:18 +00:00
Griatch
e9e94c024b Resolves issue 123. 2011-01-09 11:53:54 +00:00
Griatch
939307a5c1 Resolved issue122. Also clarified the functional sequence for disconnecting a session cleanly (avoiding circular calls that might happen if disconnection happens manually or automatically due to server shutdown). Removed the specific stopping callback from the webclient and put it in the mai
n server process instead, so all protocols can get a message when server shuts down with Ctrl-C.
2010-12-12 10:54:33 +00:00
Griatch
0eb5d29560 Cleaned up the webclient and changed how it handles sessions and identifies with the server. Fixed some reported bugs caused by the changed layout of sessionhandler. 2010-12-11 13:37:26 +00:00
Griatch
251f94aa7a Evennia now runs on its own Twisted webserver (no need for testserver or Apache if you don't want to). Evennia now also has an ajax long-polling web client running from Twisted. The web client requires no extra dependencies beyond jQuery which is included. The src/server structure has been r
cleaned up and rewritten to make it easier to add new protocols in the future - all new protocols need to inherit from server.session.Session, whi
ch implements a set of hooks that Evennia uses to communicate. The current web client protocol is functional but does not implement any of rcaskey
's suggestions as of yet - it uses a separate data object passed through msg() to communicate between the server and the various protocols. Also the client itself could probably need cleanup and 'prettification'. The fact that the system runs a hybrid of Django and Twisted, getting the best of both worlds should allow for many possibilities in the future. /Griatch
2010-12-07 02:34:59 +00:00
Griatch
ecefbfac01 Set the default settings file to point to the files in game/gamesrc/commands - these now make for good starts for overriding the default systems. The system now also matches the examples given in the wiki. 2010-11-23 18:10:41 +00:00
Griatch
72d40285b8 After lots of discussions, default commands where moved from game/gamesrc/commands/default to src/commands/default in order to make it clearer which parts are updated as part of evennia and which can be tweaked at heart's content. New templates where left in gamesrc/commands that should hopefully make it clearer how to extend the command system. Also game/web was moved to src/web - we'll likely extend this from game/gamesrc/web in the future. If you already did extensions you should just have to edit your import paths and make use of the new cmdset template supplied.
The unit testing was for commands was split out from src/objects/tests.py into the new src/commands/default/test.py in order to keep the testing modules thematically grouped with the things they are testing.
2010-11-23 01:24:56 +00:00
Griatch
502ebff1a2 Implemented a unit testing framework for Evennia. Unfortunately it seems it is only usable in latest Django SVN, due to a Django bug; Run "manage.py test-evennia" - if you get errors about SUPPORTS_TRANSACTIONS, you are affected by the bug. Since this is only likely to affect evennia devs at this point I added a few base tests in src/objects/tests.py as a template for those willing to help add unit tests. 2010-11-21 19:02:24 +00:00
Griatch
3f703efc2d Made changes to idmapper that might help alleviate issue101 (more people need to run it to make sure). Moved around default command modules to be more logically named and distributed. 2010-10-31 08:10:02 +00:00
Griatch
547eb53b32 Made search(*playername) commands correctly return a Player typeclass and not a character. Initial startup/character creation: Default permissions are now assigned on player level rather than character level (this gives more safety to @puppet operations). Made @puppet command work only on Character objects. 2010-10-21 18:58:47 +00:00
Griatch
151595a042 Turned off Django DEBUG in the default setup. This resolves all issues with memory leakage and resource hogging seen in issue112. 2010-10-11 17:22:39 +00:00
Griatch
164eb5b89b Some command bugfixes. Added some more debug messages for pinning down issue101. 2010-09-19 06:57:08 +00:00
Griatch
7e736d19e2 Cleaned up the ansi.py module and made it better match the the style rest of the code. 2010-09-05 20:59:32 +00:00
Griatch
e125763ea5 Made so the default add_default_cmdset script also removes the added cmdset when stopped. Fixed the function of @delplayer command. 2010-09-05 18:20:39 +00:00
Griatch
212061abb6 Made so the @scripts command properly display when scripts will fire next. 2010-09-05 16:35:39 +00:00
Griatch
c4128e4656 Fixed the strange login error reported in issue103. 2010-09-05 15:05:40 +00:00
Griatch
a2291953f2 Changed erroneous DateField to DateTimeField in ObjectDB, so you might have to resync your database. Fixed lots of formatting issues in the info and list commands. Resolved issue105. 2010-09-05 14:42:09 +00:00
Ari Mudev
60851ade11 Fix trivial typo in CmdSethandler documentation. 2010-09-04 16:57:01 +00:00
Griatch
e2f92f0bfe Resolved issue99, which concerned commands on adjacent players being erroneously included among a player's available commands (giving multiple-command errors). 2010-09-03 19:33:17 +00:00
Griatch
9be2b5a64b Fixed some strange behaviour in the help system due to recent changes in how cmdsets are merged by cmdhandler. 2010-09-02 18:14:45 +00:00
Griatch
e114c33d8a Fixed a bug with red_button introduced in a previous revision. Resolves issue95. 2010-09-02 07:48:39 +00:00
Griatch
900f6da80f Fixed several special cases of handling multiple same-named commands gracefully. Should resolve issue94. 2010-09-01 21:59:13 +00:00
Griatch
f83c2bddf8 Trunk: Merged the Devel-branch (branches/griatch) into /trunk. This constitutes a major refactoring of Evennia. Development will now continue in trunk. See the wiki and the past posts to the mailing list for info. /Griatch 2010-08-29 18:46:58 +00:00
Griatch
df29defbcd Added gamesrc/utils.py as a convenient shorthand for often-used methods from the engine
Added a @deluser command and gave it and @boot an option to give a reason for booting/deleting a player
Fixed a bug in @dig that confused exit directions in text
Small bug fixes
/Griatch
2009-12-20 20:51:26 +00:00
Griatch
81bec61d7d Added the apropos command for broader help searching (uses icontains).
The suggestions: footer used in help gave too narrow results, now using apropos-style search instead.
Bug fix of state-help command to make it accept switches.
Added several new example commands and cleaned up old ones to be more user-friendly.
Added protection in @delevent to make it harder to delete system events.
Some small bug fixes and other cleanup.
2009-12-20 12:39:08 +00:00
Griatch
c7cbc4854e Reworked object command tables.
Object commands used to require re-adding every call in the script parent's __init__ or factory functions, adding the commands to a new command table directly on the object. Since all other attributes can be set up in at_object_creation(), this was both inconsistent and a bit confusing to work with. There is now a method add_commands() directly defined on all objects. It takes the same arguments as the normal add_command()o but use a reserved attribute to create and update a command table on the object. This has the advantange of completely removing the __init__ call in the script parent, all definitions can now be kept in at_object_creation() and are, more importantly, persistent without having to be recreated every call.
- I updated the examine command to show all the commands defined on an object (if any).
- I updated gamesrc/parents/examples/red_button.py considerably using the new command methodology and also using the updated Events.
.
Griatch
2009-12-03 00:41:53 +00:00
Griatch
5f6454ea1e Updated the batch processor to use the new global cache system instead of the custom dict-based cache it used before. Much cleaner now.
.
Griatch
2009-11-25 23:23:24 +00:00
Griatch
c2d603c3db Fixes in batchprocessor. The batchprocessor now completely ignores states (so running a batch file where e.g. a player is forced into a state by entering a room will no longer also trap the builder using the batchprocessor to build that trapping room.) This is by automatically setting the flag ADMIN_NOSTATE on the user running batchprocessor.
.
Griatch
2009-11-25 23:02:28 +00:00
Griatch
4d9081d710 Various cleanups in the recent modifications, and improvements to how time is handled and displayed.
.
Griatch
2009-11-25 19:27:32 +00:00
Griatch
1ea7e69821 Implemented persistent cache, events and gametime counter.
OBS - there is a new data table (for the persistent cache) so you need to sync or restart with your database.

* Persistent cache (pcache)- this works the same as the volatile cache, except it is regularly saved to disk and recovered upon restart. How often the pcache is backed up is set in preferences. This was heck of a tricky thing to get right due to the intricacies of pickle; for example it turns out there is a bug in cPickle, so only normal pickle works to store the cache objects.
* Persistent events - this makes use of the pcache to re-load the scheduled events every reload. Only events with the property "persistent" will be saved this way (if not set, events will get lost upon reboot, just like now). All the main system events have been implemented as persistent events, including a new event to regularly save the pcache to disk.
* In order to track persistent event timers across reboots, there is also a global "game time" defined now. This is saved in cache and counts seconds only when the server is running. Event timers are adjusted with an offset when restarting (otherwise they will be confused by the real time jumping forward after a downtime). There are also a small set of helpful routines in src/gametime.py to help convert from real time to game time (for easy creation of new events).
* Various info commands have been updated to incoorporate the time stamp and the cache sync information.
* There are a few test commands commented out in commands/general.py that I used for testing; I left them in if you want to test things quickly. It works here, but as always more people testing is needed.
/Griatch
2009-11-22 21:18:55 +00:00
Griatch
5e866c6b73 Added more stable events.
- added PIDs to all events, so they can be deleted safely.
- scheduler.del_event(pid) cleanly deletes events from the scheduler
- added @delevent for deleting events based on PID (@ps shows this now)
- Events has a self.repeat property allowing them to only be repeated a certain time (default is infinitely many times). After the set number of repeats, the event deletes itself from the scheduler.

Events are currently not persistently stored; this is left for future commits.
.
Griatch
2009-11-18 20:10:35 +00:00
Griatch
642932a403 * Implemented a non-persistent cache in src/cache.py. The cache is lost when restarting the server but it has the advantage of not hitting the database, and so is useful for implementing things that should be remembered over time but does not need to be persistently saved in the database at every point, like fast-updating combat systems, timers etc. Using the cache can substantially cut down on database access at the cost of memory comsumption. It is easiest accessed through the object model using normal dot notation. So to store a variable in volatile memory e.g. from your script parent, you can do things like self.scripted_obj.cache.myvariable = variable and be sure that later (unless there was a reboot) doing self.scripted_obj.cache.myvariable will return the value you stored there.
* OBS - doing e.g. self.scripted_obj.myvariable = variable was always iffy and since a few revisions back this will NOT work - this is because the objects are now consistently synced with the database (in the past this was not done consistently which caused strange behaviour).
* Fixed some bugs in the multi-word command handler. It can handle multi-word exits as well now.
2009-11-01 15:12:38 +00:00
Griatch
eb6f82fea0 Added an at_obj_receive hook to basic player/object script parents. This allows
e.g. room parents to react when a player enters them.
2009-10-25 15:25:15 +00:00
Greg Taylor
4125c93c8b @dest shouldn't use a global search for object. The only time this is global is when a player specifies a dbref, which is a very specific query. 2009-10-24 03:42:42 +00:00