- automake insists on naming all libdirs .../cfserver now. i have to concur :/ - correctly reattach to players on reload, this likely fixes the reload crash bug. - init env vars very early, so perl gets to see them.
kick in perl
likely fix the freeze-on-quit bug, also nuke in-memory apartments on quit
*** empty log message ***
*** empty log message ***
- use a simpler, less fancy loader base design (basically a one-line-lookahead top-down parser).
remove some compatibility code
- implement worldmap underlay and regionset and fill in C++, resulting in a *major* speedup in worldmap loading. - use first arch (e.g. deep_sea) and first region (e.g. panthalassia) to fill maps outside the world: less hardcoded content data. - fix ext/rent.ext to actually check again for entrance. - temporarily remembver previous map in $ob->{_prev_pos} (HACK to make ext/rent.ext work).
handle runtime file writing differently
do write runtime file again
more fixes, more debugging hints, use sync_job for reload
- make server more fragile w.r.t. watchdog on freeze - try to make a perl backtrace on crash, too.
- bugfix: save unique items on map reset (doh!)
*** empty log message ***
use berkeleydb for cfdb
folks, we have a database environment to our disposal now
initial bdb support - create the database env
enable fsync by default
disable fsync for normal map writes - problems with that should be rare
load regions from perl, reload on, well, reload
temporary(?) workaround for die in query callback processing on quit
fix cf::player::maps
support maps with and without .map extension, rename to .map on save
partial region cleanup
- unrename the *_city regions as those are mostly in-use already and renaming all maps was infeasible. - fattened some areas (highway on navar needs fattening, too) - added scorn_kingdom area, a nice safe palce for picnics - added region to some of our maps we neglected - fixed stuff - fixed more stuff
bugfixes
- implement per-space regions
- tame the map/map-world.ext a bit to avoid potential memleaks for now - object refcounting was borked, fixed, again :) - add cf::attacahble::mortals_size - disable reset-after-load, this is unsafe due to locking issues, so don't do it - make map-scheduler configurable - improve emergency swap mode - prepare_random_map must be a sync job for now :( - do not keep object reference in enter_exit, the object might have been gone already. - nuke cf::object::mortals.
- introduce nodrop flag for maps to keep stuff from beign dropped _on destroy only_. this fixes the problem with Sultur, slug of terror :) - resize {link} map to be smaller
*** empty log message ***
fix the exit is closed... message by stringifying map objects to paths in normalise
- avoid negative event priorities like the plague. they are actually worse because they introduce random memory corruption and endless loops and worse, if worse exists. - aggressively swap out maps when #actives exceeds threshold - sweep and cede after server tick - increase player command handling priorities, just in case. - fix a bug in mortal checking, this was the reason for the enourmous memory leaks in map-world.ext - mark c++-side watchers as non-reentrant
there is a weird bug in Event or perl or... add some wrokarounds
mark watchers as reentrant, some FABS => fabs
add virtual worldmap plug-in
support priority for map register and document it
- write runtime file at evry low prioirty, causing the watchdog to restart the server if the event never gets executed. - allow for 90 seconds of extra monotonic jump on restarts, to give the watchdog enough time.
wait_for_tick in synchronously executed code. very, very bad idea
*** empty log message ***
lots of tuning
indent
- make random map generation more deterministic again. - expose cf::rndm to perl. - preset most random map parameters from perl to ensure determinism.
fix player_exists
add locking to prepare_random_map
properly use xsize/ysize default as random for random maps. 10/10 was not just wrong but also greatly increased the pressure on the generator, leading to more crashes. those should be solved, obviously...
this seems to fix the random map closed bug... but why?
doh
- bump coro to 3.4 minimum - delay server reload to after tick - avoid back-to-back reloads, as those crash Coro :/
fix nimbus reset etc.
*** empty log message ***
*** empty log message ***
*** empty log message ***
- introduce cf::attachable::thawer_merge, allowing classes to overwrite what happens when two objects get merged. - protect some extension data with it - make unlink_save blocking, so we do not get needless reset loops because of slow disk response.
re-bless in case extensions have been reloaded
stop runtime write watcher on freeze, too, to trip watchdog
fixes, starting to look good again
WARNING: this release is BROKEN - rewrote map handling. map types are now completely pluggable, maybe *too* pluggable, as everything is a plug-in now. - mark mandatory extensions as such. - handle overloaded attachable objects correctly. - many minor changes.
fix obvious bugs, i am still unhappy with the design
slightly more abstraction, much more to come
reset random maps regularly
make random map paths more beautiful, in the common case
- start pluggable map types framework - mvoe random map handling out of the core
beautify
clean up perl interface a bit. most notably, i decided that we cannot unload extensions at runtime, we can nuke and then reload all of them in a single but slow step, and maybe add extensions at runtime incrementally. i think this is a reasonable limitation.
- implement cf::map::unique_maps () - support string overloading for cf::path objects - minor cleanups
aggressively prefetch tiled maps around the player - prefetch maps on every tick - prefetch maps and block the player when entering maps
bah prototype mismatch
- added $cf::WAIT_FOR_TICK* - tuned map-scheduler and player-scheduler - added $op->inv_recursive - added objects_size/objects($index) and actives_size/actives($index) for access to the object and actives vector. - more robust player loader - removed _perl_data attribute support - SIGINT/TERM/HUP are now safe as they are handled synchronously. - replaced LOOK_OBJ by client_visible - cleanups
- better dm shell - minor cleanups - added cf::dumpval, cf::player::list_logins and $player->maps
major goof in LOG, and defensive programming doesn't help when you use the wrong parameters
- disabled stuff that might cause instabilities at the cost of certain (controlled) additional memory usage. - minor changes to improve the stability,
some dirty hacks^Wfixes, also remove dthe now obsolete map-prefetch plugin
- bugfixes, bugfixes, bugfixes
quick and dirty emergency fix
*** empty log message ***
*** empty log message ***
- more improvements/fixes - timestamp with millisecond accuracy, horrible code
implement quit
re-enable map reattach, re-enable emergency player save
""
improve the hack
priority inversion un-bug
fix the bug: on_destroy is obviously not being called on pooled coroutines, aslo use more sensible names than 'coro'
emergency
use coros coropool
implement locking for map data
rename goto_map to goto
- use new Coro::guard - removed cf::guard - better map loading error messages - more robust map header parsing
add some cede's strategically, tune
- word of recall activated the player indirectly - implement maptile->xy_find and xy_load - separate find and load, even on C level - generate map_leave/enter and map_change events even for tiled map changes (experimental) - implement mainloop freezeing by start/stop, not skipping ticks - no map updates when player !active
tuning, and hopefully apply last access time more correctly
- implement mlockall option - expanded config file documentation - make perl-weapon boni mandatory
- save before testing the map on swap_out, as save cedes and players might hop on the map while the map saves, changing its status.
*** empty log message ***
*** empty log message ***
- Create cf::async as safe alternative to Coro::async. - used cf::async everywhere it makes sense - fixed recursive call to find_map differently
different fix
emergency save on normal perl aborts, although its not clear how that would happen, it did happen
*** empty log message ***
lotsa bugfixes
only do daylight changes in outdoor maps
*** empty log message ***
add some robustness checks, add map find/load locking
fix follow (but should be cleanly rewritten)
minor changes, follow command still borked
move nimbus to /, simplifies upgrading
misc fixes
implemented reste command, maps command etc.
nimbus seems to work again
in my stupidity i broke the loader
this is close to working
set original flag so decay object doesn't go wild
- integrated most of the map/exit handling into cf.pm (it grows too large, should be split 'somehow', but thats not easy) - moved the swap/reste scheduler into an extension - imrpoved exit/sync logic
- random maps seem to work now - had to move map parameters into files because we need constant-sized map path lengths as the full map stack history would have to be included.
more use of shstr where it makes sense naturally
- style maps need very special treatment - cf has a nonzero chance of crashing in a random map
exit cleanly when reload fails, after all, we did an emergency_save
many minor changes everywhere, random maps crash sometimes but design is in place
misc updates
preliminary snapshot check-in, DO NOT USE IN PRODUCTION SYSTEMS See the Changes file for details
doh
interim.checkin
- small, but subtle, rewrite of object management - perl will now keep attachable objects alive - objects are now refcounted - refcouts need to be tested explicitly (refcnt_chk) - explicit destroy is required current - explicit destroy asks "nicely" for the object to self destruct, if possible - refcounts will be used during mortal killing - minor bugfixes, optimisations etc. - some former hacks removed.
enforce it
- preliminary check in, stuff is rudimentarily working - moved most of the player creation process into a perl coroutine - changed internal design of player management to not reuse and morph the object in funny ways. should be safer and much nicer to handle. - got rid of some annoying hacks, such as clear() (TODO: get rid of player_pod and other stuff now unnecessary?)
more coro support
- add preliminary per-client coroutine support (I do not threaten, I act :) - moved global events to cf::global
- misc stuff - implement $client->query
document the facts
- updated cf.pm to use a more generic and extendable syntax, now that it is clear that we will have multiple "attachable" objects. maybe bite the bullet in C++ and make attachable virtual? - completely rework the syntax for attaching and attachments - update all extensions
- add perl parts to attach to clients (should be generalised)
added some functions to the safe environment in npc dialouges
*** empty log message ***
the rename for sanity campaign hits you died - renamed stuff - partially updated copyrights - some cleanups
moved perl extensions into server codebase, where they belong
- implement event watcher autoncancellation on reload - used it everywhere - removed lots of compatibility cruft - configure does no longer check for mandatory unix functionality/headers - confgiure now runs much faster
- remove some old socket mode cruft - preliminarily added attachable client_socket interface to perl (untested but also unreachable from perl code atm)
- use new event mechanism for command handling instead of the old plugin system
- rename $uptime to $UPTIME - hopefully force alchemy to use one second delay
*** empty log message ***
nice message when extensions disable themselves
*** empty log message ***
re-implement dump and dumpbelow
- likely fix patch/create variable setters - abstract away access rights with $ob->may ("xxx") and use it
try not to lose the database on failed perl-reloads
- delayed status update in schmorplog. - adjusted priorities for event watchers. - limited io::aio request processing time.
nuke metaserver code
remove wizcast, wizpass, goto
*** empty log message ***
support %cf::CFG hash
support %cf::CFG hash
*** empty log message ***
improved docs
*** empty log message ***
*** empty log message ***
implement cleanup signal
fix database
implement (even test a bit) a shared global database for extensions
likely fix another crash bug
genaccess, take three dot one
generic accessors, take one
string scanning (e.g. for patch) is not implemented ATM but should be easy to add with an alternative constructor for object_thawer. Rewrote flex scanner to be simpler, faster and more modularised. Initial speedup: 16% (ah well)
*** empty log message ***
remove compression support, intiialise perl earlier etc. etc.
remove compatibility code
*** empty log message ***
fixes
more docs, more events
implement detach
*** empty log message ***
disable old-style plug-ins, implement attach-field for map headers and map attachments
improved,more automatic freezer
better but more wasteful serialisation support, perl can invoke events, fixes
fixes, objects on maps get instantiated properly
first, untested persistent objetc storage for players and objects, not yte for maps
further refinements
some more fixes and refinements
intermediate check-in, per-object events work
many, many cleanups
converted more events, broken per-object events (needs map support), lots of fixes
improve error feedback when safe code evaluation fails
rename ext:: to safe:: and cf::ext:: to ext::
Move callback checks to C++ and short-circuit when no callback exists for an event: No perl is touched when an event doesn't have a callback registered, so this is very fast (compared to the old way).
Implemented a rough outline of the new event system and made use of it for a number of events. The corresponding plugin-events have been disabled.
- fix extmap protocol - lay foundation for new event interface (not used, not tested) - "slow down" in-game time specials
*** empty log message ***
support perl_reload from dmshell
allow perl-reload changing ticks
- added cfperl.h, soon to be used by events - no perl == exit, its no longer optional - moved server main loop entirely in perl - removed lots of unneeded timekeeping cruft
*** empty log message ***
use perl's event loop as mainloop
fixed bug in cf.pm when unloading extensions. added EVENT_DROP_ON for the trade shops and made query_cost using double
Added cast_spell event for the perl plugin with the intention to fix create missile with a perl extension.
*** empty log message ***
first phase of JSONification of extension protocol
added pay_amount/pay_player to safe env, imprpved reload to also unload/reload .pm files
removed compatibility to ancient cfperl versions
- move cf::object::player::contr to cf::object::contr - implement wrapper classes for Safe compartment - export a few known-to-be-safe methods to Safe compartment
remove 'you cannot save on unholy ground' - no purpose is evident, and it is often annoying
Implement initial Safe compartment code to execute map-script code in a controlled environment (no looping sconstructs, no I/O, no access to the cf API or any loaded modules etc.) Added register_script_fucntion to add functionality to the compartment.
implement say in perl (as xsay currently) and add the necessary missing glue in the c part. also implement $player->reply for future uses
implement on_unload hook
cancel all watchers - extensions are responsible for restarting timers etc. (they don't right now)
use undocumented '::Eval' to fix error reporting
Prepared perl plug-in for event support removed on_clock (use more efficient Event->timer).
put maps/perl/ into perl lib path
implemented better extcmd support, improved perl plug-in
implement 'ext' packet for extensions to hook directly into the protocol
api change
*** empty log message ***
*** empty log message ***
- support cf-native key_value pairs in perl - use it when saving players and their inventory to store perl data - keep compatibility to the old format for the time being
allow returnvalues from global events
*** empty log message ***
allow perl to save/restore pelr data associated with players
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
This form allows you to request diffs between any two revisions of this file. For each of the two "sides" of the diff, select a symbolic revision name using the selection box, or choose 'Use Text Field' and enter a numeric revision.