diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 8873282199..03e2d59230 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -4,6 +4,9 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. 2006/08/14 + * Removed support for negative autosave intervals, instead added a + minsave_interval setting which specifies which is the minimum time between + character saves. Default to 100ms (map_athena.conf). [Skotlex] * Sacrifice no longer shows damage to self. [Skotlex] * When Asura fails, the skill display will still come off. [Skotlex] * Lots of cleaning of the Homun-code. Perhaps the crashes as of late will diff --git a/conf-tmpl/Changelog.txt b/conf-tmpl/Changelog.txt index 541b729f18..f2e5fc9c0d 100644 --- a/conf-tmpl/Changelog.txt +++ b/conf-tmpl/Changelog.txt @@ -1,6 +1,9 @@ Date Added 2006/08/14 + * Removed support for negative autosave intervals, instead added a + minsave_interval setting which specifies which is the minimum time between + character saves. Default to 100ms (map_athena.conf). [Skotlex] * Modified emergency_call setting to allow for more specific configuration (woe/non-woe, gvg-grounds/non-gvg-grounds, disable from nowarpto maps), see skill.conf for details. [Skotlex] diff --git a/conf-tmpl/map_athena.conf b/conf-tmpl/map_athena.conf index a3ee68cebf..e74dd1eeef 100644 --- a/conf-tmpl/map_athena.conf +++ b/conf-tmpl/map_athena.conf @@ -93,14 +93,16 @@ enable_spy: no console: off // Database autosave time -// When positive, all characters are saved on this time in seconds (example: +// All characters are saved on this time in seconds (example: // autosave of 60 secs with 60 characters online -> one char is saved every // second) -// When negative, the timeslot is constant, in seconds (example: if -1, a -// character will be saved once a second, regardless of number of players -// online). autosave_time: 300 +// Min database save intervals (in ms) +// Prevent saving characters faster than at this rate (prevents char-server +// save-load getting too high as character-count increases) +minsave_time: 100 + // Apart from the autosave_time, players will also get saved when involved // in the following (add as needed): // 1: after every successful trade diff --git a/src/map/map.c b/src/map/map.c index 93508d9662..70dc79cac4 100644 --- a/src/map/map.c +++ b/src/map/map.c @@ -169,6 +169,7 @@ int map_num = 0; int map_port=0; int autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; +int minsave_interval = 100; int save_settings = 0xFFFF; int charsave_method = 0; //Default 'OLD' Save method (SQL ONLY!) [Sirius] int agit_flag = 0; @@ -3314,9 +3315,14 @@ int map_config_read(char *cfgName) { npc_delsrcfile(w2); } else if (strcmpi(w1, "autosave_time") == 0) { autosave_interval = atoi(w2); - if (!autosave_interval) //Revert to default saving. + if (autosave_interval < 1) //Revert to default saving. autosave_interval = DEFAULT_AUTOSAVE_INTERVAL; - autosave_interval *= 1000; //Pass from sec to ms + else + autosave_interval *= 1000; //Pass from sec to ms + } else if (strcmpi(w1, "minsave_time") == 0) { + minsave_interval= atoi(w2); + if (minsave_interval < 1) + minsave_interval = 1; } else if (strcmpi(w1, "save_settings") == 0) { save_settings = atoi(w2); } else if (strcmpi(w1, "motd_txt") == 0) { diff --git a/src/map/map.h b/src/map/map.h index 5ba672cd74..37a0b9c54f 100644 --- a/src/map/map.h +++ b/src/map/map.h @@ -1246,6 +1246,7 @@ struct chat_data { extern struct map_data map[]; extern int map_num; extern int autosave_interval; +extern int minsave_interval; extern int save_settings; extern int agit_flag; extern int night_flag; // 0=day, 1=night [Yor] diff --git a/src/map/pc.c b/src/map/pc.c index 59d65aa0df..cb03378e33 100644 --- a/src/map/pc.c +++ b/src/map/pc.c @@ -7175,12 +7175,9 @@ int pc_autosave(int tid,unsigned int tick,int id,int data) save_flag = 1; //Noone was saved, so save first found char. map_foreachpc(pc_autosave_sub); - if (autosave_interval < 0) - return 0; //Fixed interval for saving. [Skotlex] - interval = autosave_interval/(clif_countusers()+1); - if(interval <= 0) - interval = 1; + if(interval < minsave_interval) + interval = minsave_interval; add_timer(gettick()+interval,pc_autosave,0,0); return 0; @@ -7594,10 +7591,7 @@ int do_init_pc(void) { natural_heal_prev_tick = gettick(); add_timer_interval(natural_heal_prev_tick + NATURAL_HEAL_INTERVAL, pc_natural_heal, 0, 0, NATURAL_HEAL_INTERVAL); - if (autosave_interval > 0) //Normal saving. - add_timer(gettick() + autosave_interval, pc_autosave, 0, 0); - else //Constant save interval. - add_timer_interval(gettick() -autosave_interval, pc_autosave, 0, 0, -autosave_interval); + add_timer(gettick() + autosave_interval, pc_autosave, 0, 0); if (battle_config.day_duration > 0 && battle_config.night_duration > 0) { int day_duration = battle_config.day_duration;