rewrote party commands
refactor decrease_ob* into ->decrease method.
- implement archetype gc - implement "proper" refcounting for arches - serialise resource file loads - implement memory poisoning - minor cleanups
reloadable archetypes, maybe
*** empty log message ***
fix.bug.
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
blehdesu
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
- emit sa global resource_update event after facedata is loaded - cleanly attach to the resource_update signal to reload sound conf
- separate internal (undefined type) and client-exported (else) resources. - new %cf::RESOURCE hash for internal resources - move jeweler.yaml to archetype ("resource") data - support resource data filters and implement yaml2json (this reduced loading time for the jeweler data by a factor of 1000 :). - clean up Jeweler.pm a bit.
reinstate timing accuracy
*** empty log message ***
reduce runtime writer drift for no good reason
*** empty log message ***
require Coro 4.32 for Coro::BDB
*** empty log message ***
switch to JSON::XS 2.01 API
*** empty log message ***
switch from Event to EV
*** empty log message ***
update copyrights and other minor stuff to deliantra
minorfix
minorfix
much improved cfpod to xml converter
less tabs
also show books as a tab
remove storable compatibility mode
cede no longer returns a status
implement merge checking by slow and careful recursion on the objects, slow, but hopefully very rare even in the future
slightly better can_merge
use a blocking freeze once more. this is why (happened shortly after leaving nimbus, when both map and palyer where saved): #0 0x00002b4cd6bd1635 in raise () from /lib/libc.so.6 #1 0x00002b4cd6bd3090 in abort () from /lib/libc.so.6 #2 0x00000000004f9dea in fork_abort (msg=0x64b26f "SIGSEGV received") at utils.C:466 #3 0x000000000046f6e3 in cleanup (cause=0x64b26f "SIGSEGV received", make_core=191) at main.C:368 #4 <signal handler called> #5 S_hv_fetch_common (hv=0x181db430, keysv=0xf1f0f90, key=0xad2a68 "ac", klen=2, flags=0, action=0, val=0x0, hash=1410644661) at hv.c:644 #6 0x00000000005634e9 in Perl_hv_fetch_ent (hv=0x0, keysv=0x95d98c0, lval=<value optimized out>, hash=<value optimized out>) at hv.c:378 #7 0x00002b4cd875e338 in store_hash (cxt=0xc78d60, hv=0x181db430) at Storable.xs:2377 #8 0x00002b4cd875cfca in store (cxt=0x0, sv=0x181db430) at Storable.xs:3608 #9 0x00002b4cd875cfca in store (cxt=0x0, sv=0x19d2fad0) at Storable.xs:3608 #10 0x00002b4cd875e35e in store_hash (cxt=0xc78d60, hv=0x19d394e0) at Storable.xs:2411 #11 0x00002b4cd875cfca in store (cxt=0x0, sv=0x19d394e0) at Storable.xs:3608 #12 0x00002b4cd875cfca in store (cxt=0x0, sv=0x19d2ea80) at Storable.xs:3608 #13 0x00002b4cd875e35e in store_hash (cxt=0xc78d60, hv=0x1ed0f530) at Storable.xs:2411 #14 0x00002b4cd875b725 in store_blessed (cxt=0x2, sv=0x1ed0f530, type=3, pkg=0xaf0000) at Storable.xs:3372 #15 0x00002b4cd875cfb1 in store (cxt=0xc78d60, sv=0x1ed0f530) at Storable.xs:3606 #16 0x00002b4cd875cfca in store (cxt=0x0, sv=0x17c345a0) at Storable.xs:3608 #17 0x00002b4cd875e912 in store_array (cxt=0xc78d60, av=0x17f8cba0) at Storable.xs:2220 #18 0x00002b4cd875cfca in store (cxt=0x0, sv=0x17f8cba0) at Storable.xs:3608 #19 0x00002b4cd875cfca in store (cxt=0x0, sv=0x1f365d40) at Storable.xs:3608 #20 0x00002b4cd875e35e in store_hash (cxt=0xc78d60, hv=0x1ebf21a0) at Storable.xs:2411 #21 0x00002b4cd875cfca in store (cxt=0x0, sv=0x1ebf21a0) at Storable.xs:3608 #22 0x00002b4cd875f400 in do_store (f=0x90b9d8, sv=<value optimized out>, optype=<value optimized out>, network_order=1, res=0x0) at Storable.xs:3797 #23 0x00002b4cd876417c in XS_Storable_net_pstore (cv=<value optimized out>) at Storable.xs:3858 #24 0x000000000057a794 in Perl_pp_entersub () at pp_hot.c:2819 #25 0x000000000056faee in Perl_runops_standard () at run.c:37 #26 0x000000000056a6c7 in Perl_call_sv (sv=0xf5fa40, flags=134) at perl.c:2838 #27 0x0000000000499779 in object_freezer::save (this=0x2aaaaed2bdd0, path=<value optimized out>) at freezethaw.C:61 #28 0x00000000004eec40 in player::save_pl (this=0x935c330, path=0x17e13b40 "/var/cfserver/players/burzum/playerdata") at player.C:147 #29 0x00000000004a78d1 in XS_cf__player_save_pl (cv=<value optimized out>) at ./cfperl.C:5929 #30 0x000000000057a794 in Perl_pp_entersub () at pp_hot.c:2819 #31 0x000000000056faee in Perl_runops_standard () at run.c:37 #32 0x000000000056bd4d in perl_run (my_perl=<value optimized out>) at perl.c:2484 #33 0x00002b4cd7d3a8e2 in cctx_run (arg=<value optimized out>) at State.xs:941 #34 0x00002b4cd7d3c825 in coro_init () at libcoro/coro.c:84 #35 0x00002b4cd7d3c7f0 in XS_Coro__State_new (cv=<value optimized out>) at State.c:1521 #36 0x0000000000000000 in ?? () (gdb) up #1 0x00002b4cd6bd3090 in abort () from /lib/libc.so.6 (gdb) #2 0x00000000004f9dea in fork_abort (msg=0x64b26f "SIGSEGV received") at utils.C:466 466 abort (); (gdb) #3 0x000000000046f6e3 in cleanup (cause=0x64b26f "SIGSEGV received", make_core=191) at main.C:368 368 fork_abort (cause); (gdb) up #4 <signal handler called> (gdb) #5 S_hv_fetch_common (hv=0x181db430, keysv=0xf1f0f90, key=0xad2a68 "ac", klen=2, flags=0, action=0, val=0x0, hash=1410644661) at hv.c:644 644 hv.c: No such file or directory. in hv.c Current language: auto; currently c
*** empty log message ***
- rewrite follow to use a coroutine and make it generally safer. - the map scheduler, under duress, tried to swap out maps fast, but when a sync job was entered it also entered and andless loop causing a freeze. hack around this temporairly by always sleeping 50ms.
sure is sure
- try to patch follow to not go onto the link map (stealing from playershop is still possible). - upgrade to Coro::Storable for maps.
*** empty log message ***
should no longer be necessary
d'oh
- fix dmshell filehandle - zero-initialise faceinfo - for various reasons, the AIO watcher has to have similar priority as the server ticker. before thta, the server ticker could preempt the map scheduler completely when overloaded, which disabled the only way to reduce load.
- clean up message system, combine all boxes into one. - suppress too long messages (we need a more robust solution to this problem). - get rid of INS_MAP_LOAD, leading to slightly cleaner/faster code and certainly one special case less. - insert objects manually at load time, this is both faster and also more correct, as loading a map is never supposed to trigger anything (and also for symmetry to the save code).
name your coroutines
- quick work around for gate-move-bug. the real fix is probably to either give everything a movetype OR to treat movetype 0 as special (can move anywhere if there is at leats one movetype not blocked). the latter was too big a change for me to do it, thus just the workaround. - do not do locking on i/o anymore.
do no longer corrupt passwqords, letting everybody to log-in
- do better transaction handling - require BDB 1.1
remove statistics code again
rent was calling blocking functions in the main coro. doh.; also, do some cleanups
be more intelligent when deciding where to go when hunting for tags
- rewrite/cleanup ob_blocked a little. its more efficient now, probably has less bugs and more bugs. - get rid of now unused P_NO_PASS.
first tag target support, goto *tag and slaying *tag should now work
progress
add some temporary stats-gathering code
- rename world to world-precomposed (mostly), which is 100% optional for the server operation - rename world-overlay to world (mostly), as to not lie about map paths - disable the skip_block thingy again, its harmful - better bdb support
- implement tag keyword but do not use it yet - skip_block now skips known types of sub-blocks - print the decoded filename if possible
*** empty log message ***
- nuke objects crossing map borders on save. bad luck.
clear links on swap-out, to avoid obvious causes for crashes
- complain louadly when we acquire a lock we already hold - deactivate map before clear calls
- clean up stuff - get rid of map_load lock - improve change_object
- implemented ref/deref "framework" that allows one to create semipersistent references and dereference them later (works only for players right now). - (partially) expose freezer and thawer to perl. - thawers now do next() automatically after instantiating. - allow the thawer to record delayed dereference requests to be resolved, well, later (should be a different class actually but lets stay realistic). - use thawers when loading maps and players and resolve delayed derefs after loading them before activating them. - serialise io for no good reason.
be less blocking when nuking players
optimisation
prepare cfplus release
use examine box for signs, new T<> tag
i fucked it up, i clean it up
first round of infobox and c++-level channels
- slap in some more locking, due to the problem Cid encountered (couldn't enter nimbus because it was "loading"). 2007-08-31 05:29:46.8853 loading /var/cfserver/players/Cid/âÂÂnimbus.map (443960) 2007-08-31 05:29:46.8888 resetting map {nuke}/aaad 2007-08-31 05:29:46.9895 move_object: monster has been removed - will not process further 2007-08-31 05:29:46.9896 move_object: monster has been removed - will not process further 2007-08-31 05:29:46.9897 move_object: monster has been removed - will not process further 2007-08-31 05:29:46.9907 BUG: process_events(): removed object is on active list: {cnt:597029,uuid:<1.2346e1c5f>,name:"Cid",flags:[0,2,7,11,15,56,57,71,80,90,98],type:1}(on {link}@10+10) 2007-08-31 05:29:47.6096 runtime file written. seems the problem was that the map was nuked and reset at the same time he entered. infact, his nimbus map was in memory for a very long time before. the change will not help if we try to load when we are nuking, but it will help in case we want to nuke a map currently being loaded, which is probably what happened here, although it is not at all clear to me why it would nuke at that moment.
the cfplus crashes were a result of overzealous face-nr caching inside the server
*** empty log message ***
use more cede_to_tick
lock map_data in addition to map_load when loading a map, possibly avoids the crash seen today
embrace JSON::XS 1.5
some more sounds for gates, holes
minor fixes
added decrease_ob_nr to the save environment and added an example to the npc dialogues.
headers actually suffice for mapinfo
major changes: - on_same_map and related functions now do not block on map loads, instead they pretend the map is not there. this ensures lag-free operation, but changes semantics considerably: running quickly over the worldmap often lets you bump into map borders until the map has been loaded. also, rabies takes longer to nuke a full continent now. - mapinfo (a major sync blocker) is now fully asynchronous, and works by quieing all mapinfo requests and retrying them on every tick until satisfed.
always reply, even if unknown
fixed exti handling, implemented generic resource request 'framework'
fixed exti handling, implemented generic resource request 'framework'
doh, the nimbus was actually slightly borked
- include experience table as our first generic resource file - swizzle init code around - do not calculate checksum in cfutil but when loading the facedata. this increases loading time by 20%, but since thats just 1.2s instead of 1.0s its not worth the extra effort of doing it beforehand.
fix minor bug resulting in a harmless backtrace
move some code to Coro
*** empty log message ***
added some fields to cf::object::wrap safe eval
add ob->send_msg and pl->send_msg as aliases to ns->send_msg, convert some more commands
*** empty log message ***
*** empty log message ***
- support more than the gcfclient-20-something sounds (dire hack) in sound.conf.res - implement "sound" face for archetypes/objects. - play sound face in signs either on map (triggered) or on the player reading it.
problem solved
reste acecss and save time when swapping in maps
- remote code was not making copies of strings it modified - implemented two ew flags: NDI_REPLY and NDI_DEF. - went over a lot of chat-related code and converted to send_msg, NDI_REPLY and NDI_DEF.
extension fixes
hacky new-style sound support, very hacky old-style sound support
better resource handling, preparing for sound effects, some chat fixes
*** empty log message ***
welcome to fxix protocol version 3, with uniform handling over all resources
first working worldmap with real-time user tracking
- new extcmd version, much streamlined - new npc dialogue protocol - older cfplus clients are supported, without cfplus_support (no dialogue), for some time. - improved worldmap support.
much better, still label duplication
implement yet another et-cpu-time primitive, this time its called get_slot... might replace most uses of wait_for_tick
fix crash problem
implement simplistic/slow/safe object merging for objects with perl data, start of a worldmap item
preliminary chat channel implementation
renamed invoke_results
fixed cf::override
the map prefetcher could end in an endless loop if fed with illegal paths. now it will only leak memory on corrupted maps. or so.
*** empty log message ***
some goofing around
first workable server-side music implementation
- make regions attachables - add attachable->set_key - support custom values for regions - convert match to a custom value - precompile regexes after reload_regions
rudimentary resource support, create new region_change event and new ext/player-env.ext
*** empty log message ***
doh
aggressively add hints to apply.C
do NOT let event do its stuff or let other coros run inside a fork_call child
temporary hack
- unbundle marker code into force_find/force_add - use completely different (more efficient) speed logic - make those methods available to perl - to avoid numerical errors use an exact fp number for MIN_ACTIVE_SPEED.
fix damned exits setting savebed, boy did it become small
*** empty log message ***
*** empty log message ***
*** empty log message ***
implement hint modes and the hintmode command
implement hint modes and the hintmode command
convert to JSON::XS 1.4 api and implement a per-client json transcoder
*** empty log message ***
goofing around
first round of implementing server-side widgets. the framework is there, but hasn't been used for anything realistic yet, so likely not yet fully usable
*** empty log message ***
*** empty log message ***
can'T do with gcfclient, it seems
first rough cut of msg rewriting, introducing cfpod, a haxored pod variant for crossfire messgaes. where will it end?
implemented async dialog replies
reorganised documentation and improved it
- use a per-player attachment in dialog code instead of a timer to detect distance. - store currently active dialog in $pl->{npc_dialog}
add dependency handling to extension loading process (alreday checked in earlier)
port micropather to c++...
some tweaking, preload random maps now, too
go through all per-player maps on startup and load those that have a resettable base map. this is similar to going tghrough all temp amps and loading them so the server can reset them. this is quite a high overhead compared to e.g. putting reswettable per-player maps into the tmp directory, too, but we might want to iterate over all players and their maps anyways at some point, to upgrade them to new formats etc. or to gather global statistics.
- new map header boolean "no_reset 1" to deny reset. - allow reset of per-player maps, effectviely implementing player-private dungeons. - re-enabled reset-on-load feature again. - remove fail-safe mechanism that prevented per-player maps from being reset. keep your fingers crossed. - fixed two bugs in archetype finding (archname vs. object name). - singularities no longer crash the server but will log a backtrace now as they are really are fatal.
- improve observe - remove more cruft code - archetype loading almost works again, reloading probbaly still borked.
rename arch->name to arch->archname for preparation of subclassing object
fix magicmap
take advantage of IO::AIO 2.4 to remove another syncpoint in the server
- restore after combined mainboard+harddisk crash - cleanup/fixes for 2.1 release - fix invoke to actually do work - refactor invoke shortcuts, gcc cannot inline varargs functions. - optimised invoke to 4-5 insns in the common case. - optimised (For no good reason) the int-to-ascii conversions of dynbuf_text into division-less and branchless code (of which I am pretty proud). - actually move players to their savebed when they did not use one and the map has been reste in the meantime. does not kill (yet) when too long. - enter_map is now handled completely in perl. - goto is now using generation counting to ensure that only the most-recently-issues goto will succeed. - make some heavy use of __builtin_expect to streamline rare callbacks even more. - optimised thawer.
*** empty log message ***
- fix players frozen on movers - allow overriding of existing spells implement town portal: - new fields portasl_maap|x|y for regions - new ext town_portsla completelyx implementing it - some debugging code, some check code
- optimise invoke by using an inline check on a bitset (kind of a simplified bloom filter for all events).
more skill tuning: - clear_skill is gone, use change_skill (0) instead. - change_skill now clears the current_weapon. - more intelligent weapon switching on unapply. - be more clever when initially applying weapons on player load/connect. - survive wrong setting of READY_WEAPON.
- introduce a notion of cpu load average within the server - use it to more gracefully increase swap intervals in the map-scheduler - add clip and lerp utility functions.
touch the runtime file before replaicng it, as touching is likely quick, while fsyncing its contents is very slow
*** empty log message ***
reset (some) signal handlers to default after fork, limit the number of concurrent async backtraces
*** empty log message ***
revamp loggin. have a new log flag logBacktrace that logs the message and prepares a backtrace in the background, spewing it into the log at a later time. this is useful to shed some light on otherwise completely useless log messages such as: 2007-04-27 19:48:48.142 Calling random_roll with min=1 max=0 which could just as well not be there as we will never find out who is doing this to puny poor random_roll.
*** empty log message ***
*** empty log message ***
slight revert, and more fixes
having a) monsters as treasures b) multipart monsters as treasures and c) multipart monsters as terasures on tiled maps... hit a big pile of bugs again. this change: - implements a per-map active flag. when items are being inserted they are activated or deactivated according to that flag. this could get rid of most or even all of the explicit activate/deactivate calls. - implement some glue to make instantiating multipart objects easier (this is used inside fix_multipart_objects and might make it possible to put multipart objects at map borders - those were winged before) - do finer-grained locking as to not lead to deadlocks when insert recurses e.g. when loading tiled maps.
- implement "random encounters" by simply populating the worldmap randomly by region. - allow treasurelists to silently forward-reference archetypes (should have an extra checkign path for never-defined archetypes) - fix GT_ENVIRONMENT, which had the semantics of putting treasure items _and_ their inventory on the floor, now only puts the items themselves on the floor. - remove warning about generated inventory - some items simply can come with an empty inventory. - do some other minor improvements.
fix a number of annoying bugs, doh.
meet our new pod fucntionality, certainly not finished :) let me also introduce the beginnings of a new help command
*** empty log message ***
*** empty log message ***
- implement two new helper functions: cf::cache => load and process a file, caching the result in the db cf::fork_call => execute a given sub asynchronously (e.g. for cpu jobs) - make use of it in ext/map-world.ext, greatly speeding up worldmap loading. - preliminary garbage added to cf::pod.
*** empty log message ***
- load_resource_file cna now load archetypes, regions and treasures freely intermingled. archetypes and treasures makes a lot of actual sense, too. (this has not been tested, but unlikely not to work :)
- treasurelists and regions can now be freely mixed within the same generic resource file. more to come.
- rename load_xxx to reload_xxx, all of which are guarenteed to a) do their thing b) take no parameters c) almost certainly fail when not run asynchronously - considerably improve dmshell (and support postfix-'&' to move job in bg) example data and execution times on my system: reload_regions 0.0007s reload_facedata 0.69s reload_treasures 0.0156s reload_archetypes 0.035s all of them run without impeding the running server (unless the server starts to use e.g. an archetype refering another archetype not yet defined), exccept for reload_perl, which is very heavy.
cede less often in background tasks while still reducing jittering
upgrade to reentrant-safe Coro::Storable
- make archetypes reloadable, pretty please - load archetypes twice at server startup, to stress-test this for the time being
rewrote archetype loader to try harder to cleanly replace archetypes
load archetypes and treasures from perl, make terasures reloadable
- rewrite treasure parser to new framework just for fun. - actually call load_treasures again. - fix bugs.
VERY EXPERIMENTAL - change the way archetypes and treasurelists are being loaded: - referring to a nonexisting treasurelist will create an empty one - referring to a nonexisting archetype will create an empty one - archetypes/treasurelists will overwrite any existing object of the same name. - net effect should be to allow reloading of archetypes and treasurelists at runtime at a later stage.
implement defaulting region by map path match
move to Coro::Storable for face loading
move animation info into facedata and make it reloadable at runtime
- implement smoothing in the fxix (or better: fxixsx) protocol. - this *enforces* that smoothing is *per face* and not *per archetype*. - no extra bandwidth is needed for map information (unlike in the crossfire 1.x protocol, where smoothlevels are per-mapspace and take up a lot of bandwidth). - no extra storage is required on the client-side (although smoothing for cached map data is then only available for tiles that have been seen). - temporarily supply empty_S.x11 smoothfaces again, as this hack is required because there is no way to specify a smoothlevel but no smoothface otherwise. this should be optimised away at a future point, but this will break gcfclient (but disabling smoothing for that might be a good compromise).
rename <player>.pl to playerdata, fix error messages in freezethaw
*** empty log message ***
implement better negotiation capabilities, implement tileset selection
*** empty log message ***
moved setup to perlspace to facilitate easier extensions and some cleanups. feels more secure, too
- add cfhq2xa to the installed binaries - cfutil: autogenerate 64x64 versions out of existing 32x32 versions if required (--cache is highly recommended). - rename faces to facedata to avoid clashes with the old file. - add the 64x64 tiles to faceset 1 in the server (unused) TODO: protocol to split faces (they are too large) TODO: devise a faceset protocol incompatible enough with gcfclient so it doesn't puke.
*** empty log message ***
- get rid of dreaded JSON::Syck, it made me Sick. - disable concept checking.
- rewrote more face handling code - automatically send smooth faces, as the client will need them anyways and it makes little sense to wait for the client to axk for it. of course, gcfclient suffers from weird ordering problems again. - UP_OBJ_FACE was often abused in situations where other things changed, updated lots of spaces, probably more to be done. - update_smooth became so small that inlining it actually clarified the code. similar for update_space, which is not inlined for other reasons. - faces were not initialised properly - add versioncheck for face data - rewrite invisibility handling a bit: god finger etc. now makes you blink, blinking routine has changed to be less annoying and more useful while still indicating invisibleness.
- rewrote smooth face handling, as a side-effect, smoothing seems to work again and smooth faces can be reloaded. - the server now sends the full animation for an object the first time it is seen, this uses slightly more bandwidth initially, but avoids the flickering for objects change their face later.
take advantage of Coro 3.52's ability to set the stacksize and work around the deep recursion required just to generate mazes
- MAJOR CHANGE - you now need to use cfutil to install arches. - former bigfaces are broken in the server - bigfaces are no longer supported. at all. - use face numbers instead of pointers * saves lotsa space * saves lotsa indirections * saves lots(?) cpu cycles - completely rewrote face handling - faces can now be added at runtime - reload will add new faces - this does not apply to animations - use a hastable instead of binary search (faster) for faces - face caching is broken - facesets are gone - server always reports MAX_FACES to any client who asks
- 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.