summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Changelog-Trunk.txt3
-rw-r--r--conf-tmpl/Changelog.txt3
-rw-r--r--conf-tmpl/map_athena.conf10
-rw-r--r--src/map/map.c10
-rw-r--r--src/map/map.h1
-rw-r--r--src/map/pc.c12
6 files changed, 24 insertions, 15 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt
index 887328219..03e2d5923 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 541b729f1..f2e5fc9c0 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 a3ee68ceb..e74dd1eee 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 93508d966..70dc79cac 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 5ba672cd7..37a0b9c54 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 59d65aa0d..cb03378e3 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;