- 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.
partially support vpath builds
untested move_player in xs
kick in perl
- identified random memory corrutpion bug - fixed most likely cause for bug above - rewrote object loader etc. into a simple one-line lookahead parser. - rewrote/cleaned up archetype, treasure, artifact, formula parser. - some optimisations / cleanups
- use a simpler, less fancy loader base design (basically a one-line-lookahead top-down parser).
- 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).
uglyness prevails in fixing nekosan
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.
- likely fix the memleak problem. - leave some dbeuggig code in purposely.
abuse some flags to assist debugging
load regions from perl, reload on, well, reload
- improve error messages from object_thawer to incldue line numbers - provide geenric parse error handler - finish basic design of generic object loader - implement generic regions loader - use it to load regions: loader_region loader; if (!loader.load (filename)) error; - regions should now be the very first filetype that could be reloaded at runtime
finally finished the last bits of the jeweler skill. now only debugging and balancing is missing. going to make some maps next and try to sort out the right balancing.
*** empty log message ***
partial region cleanup
bugfixes
- implement per-space regions
abstractify attachable sv_unmagic operation
- sv_unmagic calls free, which svrefcnt_decs, which in turn will free the scalar, leavign sv_unmagic running on invalid memory, so keep an extra refcount around sv_unmagic to delay destruction. should be abstracted into an attachable_unmagic method.
- 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.
- weirdify refcounting: objects still keep their natural refcount of zero do not borrow anymore, seems the right thing to do *right now*
re-enabled memleka, server crashes without it
- 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
*** empty log message ***
- move util/world.png to server/lib/ (should go to maps/world.png, but I will not fiddle around with that now) - compile worldmap to world.pst and install it. - rename FLAG_NO_SAVE to FLAG_NO_MAP_SAVE - define FABS to fabs, as intended - fix all(?) the FABS(int) calls
fix random number generator seeding
base classes can be so tedious
expose fork_abort to perl
- make random map generation more deterministic again. - expose cf::rndm to perl. - preset most random map parameters from perl to ensure determinism.
removed some old plugin functions which were causing a crash and ported ipo.ext to work again.
- re-do stupid teleport command. can now teleport to the player even if no space is available. can even teleport to logged-out players, whatever useful that might be. - goto now supports x and y destination coordinates as additional arguments.
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.
*** empty log message ***
implement new flag_no_save to avoid saving
make random map paths more beautiful, in the common case
- 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
- 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
major goof in LOG, and defensive programming doesn't help when you use the wrong parameters
some dirty hacks^Wfixes, also remove dthe now obsolete map-prefetch plugin
- move most last_* values into socket, where they belong - this actually saved a lot of space in the text segment, which might mean less complicated pointer accesses, because the data is no where it belongs, mostly.
more preperations for player eviction
implement quit
""
- clear perl objects on C++ destroy: if you want to do something with the data, you have to save it away in DESTROY.
- 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
- implement mlockall option - expanded config file documentation - make perl-weapon boni mandatory
use freezer api for saving players, too
- 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
many minor changes everywhere, random maps crash sometimes but design is in place
different interface design for c++/perl map handling, some random map framework
fix some bugs
random maps are nphard
preliminary snapshot check-in, DO NOT USE IN PRODUCTION SYSTEMS See the Changes file for details
misc stuff
introduce for_all_maps
replace update_ob_speed by ->set_speed
un-goof
- some fixes - disable some refcounting again, not ready yet - simplify save_object
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.
fixed return value of query_cost for the perl bindings
- support Coro on C level - check for required modules availability (but not suitability) in configure
- implement (mostly untested) array member support for genacc - make some arrays and other members available to perl - redefined meaning of NUM_FLAGS (really meaning number of flags now, as the code assumed anyway). - moved afk flag to client, where it belongs (make sno sense to save it, is also true for wiz &c). - updated extensions to reflect all that (Jewler.pm should be tested w.r.t. resistances)
- re-enable hiscore checking on savebed apply
- rename flags => flag (because its rpedominantly used singular), - remove remaining use of the flags array semantics
- improved login code - removed some cruft code and (finally), the player_pod hack
- 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?)
- add preliminary per-client coroutine support (I do not threaten, I act :) - moved global events to cf::global
- misc stuff - implement $client->query
*** empty log message ***
- made state a per-client variable (that does not magically make state a per-client thing!) - rename player->socket to player->ns. its not a good name for "client", but it is an historical artifact, and better than "socket".
- 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
- made client a first-class crossfire-perl object (its attachable), but perl support is missing. - added some client events - fixed reply not working after logout
removed TOOL and BUILDFAC which were also dead types.
removed dead types: FIREHOLES and POISONCLOUD.
removed LIGHT_SOURCE, MONSTER and SPAWN_GENERATOR types.
removed TRAP_PART, renamed WALL to BUILDABLE_WALL to reflect the usage of this type these days and fixed generic destroyer not to remove players and other objects that can crash the server (hopefully).
- mapspace caches are now reevaluated only on-demand only - "heavily" optimised get_map_flags - it might be MUCH faster now - some cleanups - some deoptimisaton in update_object - enabling it makes some bigfaces disappear when they are not fully visible. why?
removed QUEST and LIGHTNING types.
removed EXPERIENCE type.
- separate all comamnds into immediate/socket-level and queued/player-level - clean up player command handling, handle up to 8 commands/tick
removed FLAG_TREASURE as it is not used by the code and not by the archetypes or in maps.
added decrease_ob_nr to handle object decreasment.
- socket i/o is completely asynchronous now - some command sare handled immediately - others (most palying related commands) are queued for later (as of now synchronous) processing - specifying a max queue length (in seconds) is possible, but disabled - also add some syntax sugar for network code
the rename for sanity campaign hits you died - renamed stuff - partially updated copyrights - some cleanups
moved perl extensions into server codebase, where they belong
- make client_socket accessible to perl - on linux, record rtt and rttvar - who shows rtt/rttvar
- write() is now independent of server ticks and will be done immediately - get rid of CORK hack, it is no longer necessary
- implement c++ interface to Event->io watchers - cut number of write()'s the server does in half
- remove some old socket mode cruft - preliminarily added attachable client_socket interface to perl (untested but also unreachable from perl code atm)
- rewrote most of the socket loop code - moved connection accept into tcp.ext - no evil socket copying anymore, needs more cleanups
(intermediate check-in for recoverability)
- medium decruftification - medium cleanups - make settings accessible to perl using cf::settings->mutator (completely untested)
- more ooficiation - removed now superfluous remove calls
reduced dependencies on old plug-in api, fixed some bugs and renamed some methods while I was at it.
- use new event mechanism for command handling instead of the old plugin system
*** empty log message ***
- remove long long hacks for perl - use standard PRIxbb/SCNxbb macros - use IVs for 64 bit values on 64 bit perls
added fix_walls_around for the builder ui extension.
the object cache is dead
added uuid accessors for perl.
allow priviledge override for banish, kick, arrest, reset, teleport and summon
new command: wizlook
re-implement dump and dumpbelow
- likely fix patch/create variable setters - abstract away access rights with $ob->may ("xxx") and use it
nuke metaserver code
added many accessors and mutators to struct player, including *title* and (hint, hint) *own_title*
mapstruct => maptile removed many ytypedefs in favor of structure tags
*** empty log message ***
bugfix
remove rename command and implement lots of extra perl support
presuppose iso c++0x
implement (even test a bit) a shared global database for extensions
- introduce shstr_cmp for mass comparisons to shstr and make use of it - introduce assign utility function to replace strncpy
*** empty log message ***
convert to more stable depth-firts iterator
indent
*** empty log message ***
fix perl class for archetype, never free once-allocated objects, or destruct them, there are too many long-lived references (and refcount doesn't help, likely because it isn't correctly being incremented/decremented).
remaining bugfixes
*** empty log message ***
genaccess, take three dot one
genaccess, take three
generic accessors, take one
sigh
fix, uhm, bug. da.
Changes... - alternative shstr representation, saves code - use glibs splice memory allocator (seems slower) - use simpler memory/lifetime management for objects, no recycling
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)
THIS CODE WILL NOT COMPILE use the STABLE tag instead. - major changes in object lifetime and memory management - replaced manual refcounting by shstr class - removed quest system - many optimisations - major changes
added SK_EXP_SKILL_ONLY
*** empty log message ***
rewrote object serialiser, parser is next
added find_archetype
*** empty log message ***
*** empty log message ***
removed cf_object_say/speak
remove compression support, intiialise perl earlier etc. etc.
remove compatibility code
introduce overhead in the hope of decreasing it at some point
fixes
improve thawer interface, implement some monster event support
more docs, more events
rewrote parts of the connection code, which now is completly perl invoke- and overrideable.
implement player_move event and make use of player_shout/say/chat/tell events
Implement on_say, fixed a bug in ->invoke methods.
disable old-style plug-ins, implement attach-field for map headers and map attachments
implement destroy event for objects and maps, implement loading of persistent map header
properly clear and disconnect perl object if cf object gets freed
improved,more automatic freezer
reduce cfapi dependencies, move cfperl initialisation to an earlier point
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
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
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
- 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
workaorund for client mapscroll overflow
get rid of esrv_map_scroll and MapNewmapCmd, map update will handle it automatically
use perl's event loop as mainloop
converted perl to a mandatory / non-dynamic plug-in, firts step to put it fully in-core
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.