*** empty log message ***
dimdoor spellarg
fixed broken duplicate spellbook removal.
*** empty log message ***
slim down perl interface
*** empty log message ***
rmeove most shstr-strcmps
eradictae strstr when contains is meant
*** empty log message ***
refactoring of shstr classe,s new shstr_tmp, lots of minor rewriting
fix crash bug in apply_sign
nuke old autopickup
*** empty log message ***
*** empty log message ***
smell, remove gcfclient support, material fixes, cfpod parse fixes, refactoring
better understanding leads to better understanding
implement smell member for mapspaces, remove all traces of the old RANDOM macro
use dakrlevel, not darkness
implement primitive noise hack
fix observe and other los issues
new los code
*** empty log message ***
*** empty log message ***
destroy (true) => destroy ()
do the same everywhere else
*** empty log message ***
*** empty log message ***
reformatted some messages, introduced an experimental \r without any fucntion yet
remove listen(ing)?
*** empty log message ***
correctly (hopefully) set starvation kill reason
*** empty log message ***
many bugfixes
*** empty log message ***
*** empty log message ***
*** empty log message ***
*** empty log message ***
probably fix starvation message
*** empty log message ***
added workaround/bugfix for some broken rods on maps, to allow at least one possible discharge for them.
unapply items does not update client; update copyright
see Changes
- remove all "obviously safe" uses of esrv_del_item.
get rid of one superfluous esrv_ update due to split rewrite
- fix weight update on insert-merge - refactor get_split_ob into ->split, taking advantage (partially only) of split managing client updates.
refactor decrease_ob* into ->decrease method.
minor refactoring
*** empty log message ***
sigh
*** empty log message ***
*** empty log message ***
*** empty log message ***
fix a freeze bug when looking for an arrow in the inventory
rename, json2json
*** empty log message ***
moved update_stats from the inner drop/put loop to the callers. and converted some old messages. also hard limited pick_up now.
update copyrights and other minor stuff to deliantra
update the weapon status on load, not connect, as thats too late as code might try to access the player
- implement archetype->instance as replacement for arch_to_object (better name?) - fix arrows merging with stuff on floor - fix level_for_item to read more clearfly, do not use drand48 and fix the random level generation when !level set. - splay arrow container in find_arrow (but searching containers is still borked?) - improve create_missile spell.
this weird door at /quests/pippijn/tuk_ice/tuk3+4+3 caused the crash, as messages seem to be mandatory there
some more raw channel tuning
first round of infobox and c++-level channels
better fingers
*** empty log message ***
*** empty log message ***
fix cure disease giving exp for the wrong skill
indeed i fucked it up again
cleanup
cleanup
do not regenerate hp and sp when food is zero, this is ridiculous. the logic seems rather convoluted and broken, too
cleanup
fix a server crash when unpaid items get dropped on logout due to the socket being released first, but we require contr->ns to be valid at all times when a player is on a map
on request add inscribables to readables for autopickup
sound is provided by doors now (hopefully)
very very preliminary, non-working sound framework
support multiple attributes per widget set/get
drop unpaid items on disconnect. far easier than to do it at connect time
- improve dynbuf implementation further - save now saves shstrs longer than HUGE_BUF, lets fix any brokenness remaining in the server... - converted most describe_*-functions to dynbuf_text, making them likely faster (or maybe slower), while removing any hardcoded length limit. - memory allocated for static dynbuf's is not being returned ever (at least not the initial chunk, maybe fix this?) - implement framework for predeclared const shstrs for comparison purposes (shstrinc.h). - enabled and enforced new material code. - implement hack to clean up book titles. - increases HUGE_BUF to 10240, to be similar to mac network packet size.
- upgrade crossfire trt to the GPL version 3 (hopefully correctly). - add a single file covered by the GNU Affero General Public License (which is not yet released, so I used the current draft, which is legally a bit wavy, but its likely better than nothing as it expresses direct intent by the authors, and we can upgrade as soon as it has been released). * this should ensure availability of source code for the server at least and hopefully also archetypes and maps even when modified versions are not being distributed, in accordance of section 13 of the agplv3.
add some debugging code, fix players not getting freed on logout
adjust player destroy code for extra reference from observe
- archetype is now a subclass of object. - store archetypes in an object_vector. - use a different startegy for archetype loading (reloading is MOST CERTAINLY broken).
rename arch->name to arch->archname for preparation of subclassing object
its never working on first try
- remove slow and unneeded cruft code from map1. - decouple map display/stats update from ob (use pl->obsere instead)
update copyrights in server/*.C
- 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.
fix wizpass
new speed management: - weapon speed and object speed is now completekly decoupled for players. - both can be used at the same time, or indeepndent, when running or firing. - still only one command per object speed can be issued.
- change weapon speed inside server to be the real speed value. - send speed and weapon_sp as actions/second to the client. this breaks cfclient which divides speed/weapon_speed, but makes more sense.
- fix oratory to correctly account to the oratory skill - change the unapply logic to be more careful (basically ignore skills as they get unapplied a lot)
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.
- more rewrite: change_skill now only changes the chosen_skill, nothing else. new flag to suppress skill tool behaviour of readying the skill when applying the tool, for use in find_skill.
remove superfluous/broken settings and related code - COZY_SERVER: enabled most msall adjustments, changed digestion formula to the original one, party member treament w.r.t. pets enforced. - PROHIBIT_PLAYERKILL: default - real_wiz: removed and enforced - create_home_portals: removed and enforced - casting_time: removed and forced to be off (was crashing anyways) - was_wiz flag removed and treated as off usually unless it was used in place of flag_wiz. - do not save or restore wiz, wizcast and wizpass flags.
always switch to ranged weapon when using it (for now)
lots of little changes: - fix MIN/MAX_AC/WC and use them - abstratc weapon speed into player->weapon_speed, as it is just way too confusing and probably needs frequent updates :) - use ob_speed/weapon_sp * 0.5 as an arbitrary real attack speed .5 needs tuning, elsewhere, but ahs been put in as a stopgap measure. - fix speed issues, properly use weapon_sp (if a bit lagged) - clear current weapon when readying skills because a skill might already be readied implicitly.
avoid the speed boost on first hit
some floatingpoint Āµopts
lots of speed logic changes
adjust bow speed accoridng to formula
fix weapon speed to be more in line with documentation
*** empty log message ***
*** empty log message ***
- unrelated change, replace get_attr_value/set_attr_value by a nicer to use stat member function. should really replace the struct values by an array.
almost works
double the allowed arrow speed
*** empty log message ***
closer, still hackish
*** empty log message ***
beta it slowly into shape
better feedback, actually switch to the bow when using it
big simplification, still doesn't work, but feels cleaner
This is the first rough cut of the skill use system (use the STABLE tag). Details will likely change, and combat skills do not work very well, but it works quite well. Players no longer have a shoottype or range slots, instead, each player has these members: combat_skill/combat_ob the currently selected skill (and weapon) for direct attacks. ranged_skill/ranged_ob the currently selected ranged skill (and bow/spell/item) golem the currently-controlled golem, if any.
goofign around a bit: the while ranged/non-ranged system is borked and needs some serious redesign
considerably change the balancing of missile weapons: - treat bows as weapons in update_stats. - completely change calculation of attacktype, damage and wc inside fire_bow. this should make missile weapons much stronger and hopefully more competitive. the formulas are probably broken, but hopefully at least an improvement.
very very aggressive tcp keepalive - tghis might time out connections in 4 seconds
rewrote output buffer handling. the new system: - outputs messages immediately. - suppresses following duplicates. - enforces a minimum setting. - is, as usual, faster and leaner. the only problem is that the code worked out of the box, which is not reassuring.
server crashed this morning because a freed golem tried to follow his owner, triggering the assertion failure. the golem had no owner, but the owner still had him in his range slots. I refactored a bit of the code and rearranged it to hopefully increase chances of this not occuring again.
- implement a rudimentary framework for a "msg" command that replaces drawinfo and drawextinfo and allows for simpler usage in simple cases and extensibility for the less complex uses. - moved the character race choosing logic into perl, making use of the new msg command if the client supports it.
check for validity of map, as map might be legally 0 if the player could not yte enter the link map
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.
- reduce default output-sync to less than a second - output-sync command now uses seconds as unit, not something users cannot even know. - lots of useless const adjustments.
- remove many TODO items that in fatc have been fixed already without looking at the TODO. - remove unpaid items on playerdeath unconditionally. - reenabled cede-while-saving.
- 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.
some tiny cleanups and moving of non-time-critical commands into perl
do not crash when trying to load nonexistant or broken players
- 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
hell on earth, rewrote the container code - it really was a mess before - open/close events should now be very reliable. - make container an object_ptr, just to be on the safe side (the old code is known to crash, the new code should be reliable, but...). - its also smaller, much smaller/clearer in sourcecode size and a bit smaller in text segment size. also disable big worldmap again: is this still causing memleaks?
rework material code in preparation for nuking object->materials, also add some useful object methods in preparation of the mapspace limiting
- add visibility_at to players (only), might/should be an object method - mood spells only affect visible spaces now.
- 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
just experimenting
- remember the map path on deactivate and save (because enter_map isn't called for all map changes - doh)
- disabled stuff that might cause instabilities at the cost of certain (controlled) additional memory usage. - minor changes to improve the stability,
- bugfixes, bugfixes, bugfixes
- 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.
disable destroy
quick and dirty emergency fix
more preperations for player eviction
- more improvements/fixes - timestamp with millisecond accuracy, horrible code
implement quit
""
added some copyrights
fixed a bug where the wrong object was transferred.
fix quit to actually delete the directory, should all be moved to perl
- 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
set no_drop flag on all inv items of created objects (e.g. pets), experimental.
- new untested set_flag_inv method to change a flag on all inv objects - do ot satop running when switching maps - fixed speed_left assymentry in handle_newcs_player - do not immediately handle running commands when calling handle_command, as it could have deactivated the object.
implemented proper support for empty treasures, which sadly occur in empty treasure lists. fixing treasurelists to have no entries at all would be even more complicated, but even when this is fixed, the current changes only make the server more crash robust to bad treasures. Also removed the 'NONE' specialcase for treasure lists. Developers should use 'none' instead now.
initialised :)
lotsa bugfixes
*** empty log message ***
add some robustness checks, add map find/load locking
more use of shstr where it makes sense naturally
many minor changes everywhere, random maps crash sometimes but design is in place
get rid of annoying enter_exit (0)
preliminary snapshot check-in, DO NOT USE IN PRODUCTION SYSTEMS See the Changes file for details
i cannot find, nor reproduce, the problem at all. the log clearly shows map loads where there shouldn't be any, so we lose maps. but only on cf.schmorp.de. i am frustrated.
restore log out logging, reduced command queue length to 3
introduce for_all_maps
- added maptile->insert and object->insert_at methods that might make code using it clearer. - replaced some insert_ob_in_map calls.
drop-to-ground on player logout fixed, possible warning from set_speed fixed
more cleanups and bugfixes, we are reaching a local peak of stability now
replace update_ob_speed by ->set_speed
un-goof
fix player quitting
un-goof
- some fixes - disable some refcounting again, not ready yet - simplify save_object
- 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.
an experiment
- reorder stuff so that the endlessly sucky gcfclient doesn't get confused
re-enable motd &c
- 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
- fix ordering in player::connect, avoiding a crash on invalid range slots - this is now online, and seems reasonably stable - IO::AIO 2.3 is *required* due to a bugfix in it.
- surprisingly, there were some bugs. in Event, too :( - dieing and food checking are now only done in ST_PLAYING state. this might, but should not be, exploitable, in serious ways.
- 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?)
*** 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".
- 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 EXPERIENCE type.
- minor cleanups - minor optimisations (in_player vs. is_player_inv) - added P_PLAYER map flag - some (dead) concept code
goofing around in vain, trying to find a generalisation for esrv*item
- separate all comamnds into immediate/socket-level and queued/player-level - clean up player command handling, handle up to 8 commands/tick
- check for in-memory map headers on login, so players end up on their random map (which has no file) again. (this is more efficient in the general case anyways - in case the temp map does not exist, the emergency position is used. (an alternative that avoids this is to make the file some real map (like per-player maps))
- remove no_shout - serialise command execution somewhat again :( - avoid exceptions
- limit command backlog to two seconds
- 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
while goofing around, trying to understand the command code - did some reindentation - which lead me to find some dead code - which lead me to some optimisations and more dead code fun.
- 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
temporarily save and restore spollmon steting
- rewrote most of the socket loop code - moved connection accept into tcp.ext - no evil socket copying anymore, needs more cleanups
moar\! rewrite\!
fixed some callers of find_treasurelist to handle non existing treasurelists more gracefully ('gracefully' as in 'do not crash').
- further cleanup and rewrite - fix a potential crash in "lock" and "mark" packets
further cleanups and oofication
- more ooficiation - removed now superfluous remove calls
replace some function- by method-calls
removed #ifn?def WIN32 from all files
remove golem_count, likely golems are destroyed late now
updated and applied newpickup flesh patch by benoƮt <bencha1969@yahoo.fr>
formatting
* nuke op->contr when players log out, to avoid dereferencing them later :( * also rename free to destroy * do not create weird messages when people examine pseudo inventory objects
*** empty log message ***
mapstruct => maptile removed many ytypedefs in favor of structure tags
replace was_destroyed by much simpler and less expensive ->destroyed, which is valid, as objetc pointers are now reliable.
indent
cleanup
- improve assign to prepend "..." - make more use of assign - implement op->debug_desc() and make some more use of it
indent
fixed crash on quit
indent
Some cleanups.
*** empty log message ***
Changes... - alternative shstr representation, saves code - use glibs splice memory allocator (seems slower) - use simpler memory/lifetime management for objects, no recycling
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
Pippijn un-fucked it up.
removed all the broken SHOP_FLOOR checks and replaced them with the is_in_shop () check function.
expand initial tabs to spaces
implement player_move event and make use of player_shout/say/chat/tell events
nuke transports
fixes, objects on maps get instantiated properly
first, untested persistent objetc storage for players and objects, not yte for maps
intermediate check-in, per-object events work
many, many cleanups
converted more events, broken per-object events (needs map support), lots of fixes
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.
added safe map and some checks over the code to make the maps really safe!
Made server compile with C++. Removed cfanim plugin and crossedit. C++ here we come.
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.