Updated the file. I offer the code here, though Osiris is the better option for certain purposes; the advantage of this char script is its compatibility with save games, other mods (or easy to patch in) and the option to name the save files (Osiris only seems to allow to use the actual auto-save function):

Code
INIT
EXTERN INT:%UsedSave = 0
EXTERN INT:%UsedCombatSave = 0

EVENTS

EVENT SaveTimer
VARS
	CHARACTER:_Player = Player1_dac1443f-a866-4ab3-b240-e705c0b20ec5
ON
	OnInit()
	OnCombatEnded()
ACTIONS
	IF "c1"
		IsEqual(__Me,_Player)		
	THEN
		StartTimer("AutoSaveTime",600,-1) //600 seconds (10 min.)
	ENDIF

EVENT SaveTheGame
VARS
	CHARACTER:_Player = Player1_dac1443f-a866-4ab3-b240-e705c0b20ec5
	INT:_int
ON
	OnTimer("AutoSaveTime")
	OnFunction("GameAutoSave")
ACTIONS
	IF "!c1&!c2&!c3"
		CharacterInCreation(__Me, _)
		GameIsSaving()
		GlobalGetEvent("ModAutoSaved")
	THEN
		IF "c1&c2"
			GetVar(_int,_Player,"UsedSave")
			IsEqual(_int,0)
		THEN
			SaveGame("ModAutoSave1") //name of save1
			SetVar(_Player,"UsedSave",INT:1)
		ELIF "c1"
			IsEqual(_int,1)
		THEN
			SaveGame("ModAutoSave2") //name of save2
			SetVar(_Player,"UsedSave",INT:2)
		ELIF "c1"
			IsEqual(_int,2)
		THEN
			SaveGame("ModAutoSave3") //name of save3
			SetVar(_Player,"UsedSave",INT:3)
		ELIF "c1"
			IsEqual(_int,3)
		THEN
			SaveGame("ModAutoSave4") //name of save4
			SetVar(_Player,"UsedSave",INT:0)
		ENDIF
		GlobalSetEvent("ModAutoSaved")
		StartTimer("RemoveSaveBlock",10,0)
	ENDIF
	
/*EVENT CombatEndSaveTimer
ON
	OnCombatEnded()
ACTIONS
	StartTimer("SaveCombatEnd",3,0)*/
	
EVENT CombatEndSave
ON
	OnTimer("SaveCombatEnd")
ACTIONS
	CallFunction("GameAutoSave")
	
EVENT ReEnableAutoSave
ON
	OnTimer("RemoveSaveBlock")
ACTIONS
	GlobalClearEvent("ModAutoSaved")
	GlobalClearEvent("ModCombatAutoSaved")
	
EVENT AutoSaveCombat
VARS
	CHARACTER:_Player = Player1_dac1443f-a866-4ab3-b240-e705c0b20ec5
	INT:_int
ON
	OnCombatStarted()
ACTIONS
	IF "c1"
		IsEqual(__Me,_Player)
	THEN
		StopTimer("AutoSaveTime")
	ENDIF
	/*IF "!c1"
		GlobalGetEvent("ModCombatAutoSaved")
	THEN
		IF "c1&c2"
			GetVar(_int,_Player,"UsedCombatSave")
			IsEqual(_int,0)
		THEN
			SaveGame("ModCombatStart1")			//name of combat save file 1
			SetVar(_Player,"UsedCombatSave",INT:1)
		ELSE
			SaveGame("ModCombatStart2")			//name of combat save file 2
			SetVar(_Player,"UsedCombatSave",INT:0)
		ENDIF
		GlobalSetEvent("ModCombatAutoSaved")
		StartTimer("RemoveSaveBlock",10,0)
	ENDIF*/

Saves on combat started and ended can easily be enabled.

Some notes on it:

Due to the timer problem in combat I stop the auto-save timer when combat starts, as Sniper suggested, and restart it when it ends. - Only Player1 triggers these timed auto-saves.

I've added 4 save slots and save the number of the next slot to use after each save. I use extern variables (only set and checked on Player1) to make sure that both players have information on which save file is next (this implies that loading a save will also reload the file order, in most cases it's not the oldest save file that gets used next time; there's no way to avoid that).
I need both Players for saving OnCombatStarted and OnCombatEnded, in case one of the players doesn't get involved in combat. To prevent both players from saving on these events I block saving on these events for 10 seconds after one character saved (the combat timer bug shouldn't be a problem here). Player1 and 2 don't enter combat at the exact same time, so there's always one character first to trigger the save.

Saving OnCombatEnded causes a little bug: the character's weapon remains unsheathed when loading the save and can't be unsheathed by pressing TAB (attacking a random target, item, ground or character) solves the issue. To avoid that I trigger the save 3 seconds after combat.


My mods for DOS 1 EE: FasterAnimations - QuietDay - Samaritan