I change our script for a console raport
foreach (DictionaryEntry entry in DisguiseTimers.Timers)
{
Mobile m = (Mobile)entry.Key;
writer.Write(m);
Console.WriteLine("(((Timer)entry.Value).Next - DateTime.UtcNow) is {0}",(((Timer)entry.Value).Next - DateTime.UtcNow));
writer.Write(((Timer)entry.Value).Next - DateTime.UtcNow);
writer.Write(m.NameMod);
}
Console.WriteLine("saved (((Timer)entry.Value).Next - DateTime.UtcNow)");
}
and test saves
Here is a raport when when no one uses disguise and server create save properly ( two players have them in their bags but dont use it)
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:38:46.8490030saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:38:47 Closing Save Files.
08:38:47 Save finished in 0,16 seconds.
When one player use disguise for name change (second tester got kit but unused)
Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:40:42.2530030(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:59:49.6639990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:40:42 Closing Save Files.
08:40:42 Save finished in 0,15 seconds
Two players used kit for name change (one online, second offline)
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:44:39.1640030(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:59:49.1250000(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:55:52.7529990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:44:39 Closing Save Files.
08:44:39 Save finished in 0,15 seconds
Next save log when two players use it (one logged, second unlogged)
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.08:52:10.5850020(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:52:17.7040000(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:48:21.3319990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
08:52:10 Closing Save Files.
08:52:10 Save finished in 0,17 seconds.
After 2 hours. Still only one toon is logged, second tester offline.
Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:42:12.9110030(((Timer)entry.Value).Next - DateTime.UtcNow) is 00:02:15.3779990(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:01:40.9940010saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:42:13 Closing Save Files.
10:42:13 Save finished in 0,17 seconds.
About three minuts later. First toon still online, second offline.
Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:44:31.1380020(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:00:02.8490000(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:03:59.2210000saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:44:31 Closing Save Files.
10:44:31 Save finished in 0,15 seconds.
As I see -00.00.02 time is for first (logged) toon, but when I initiate a save , his timer gone. I still see a timer for second - offline toon.
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:49:12.4760020(((Timer)entry.Value).Next - DateTime.UtcNow) is -00:08:40.5590010saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:49:12 Closing Save Files.
10:49:12 Save finished in 0,16 seconds.
Next we logout first toon and logged second with timer -00.08.40. Enter a save and
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.10:52:34.6100020(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:55:36.3860000saved (((Timer)entry.Value).Next - DateTime.UtcNow)
10:52:34 Closing Save Files.
10:52:34 Save finished in 0,15 seconds.
As I see server properly restored timer for the toon that after using disguise was logged off and next logged onto after more than 2 hours, but logs indicated that two hours countdown continues even if the character is offline.
Still no crash
Also will check report at crash and paste it here.
Edit:
I logged for our first test toon again, used disguise, relog on my staff toon, use save and
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is -735452.12:02:09.3940020Error:
12:02:09 System.ArgumentOutOfRangeException: Argument is out of range.
at System.DateTime.op_Addition (DateTime d, TimeSpan t) [0x00000] in <filename unknown>:0
at Server.Timer.get_Next () [0x00000] in <filename unknown>:0
at Server.Items.DisguisePersistance.Serialize (Server.GenericWriter writer) [0x00000] in <filename unknown>:0
at Server.StandardSaveStrategy.SaveItems (Server.SaveMetrics metrics) [0x00000] in <filename unknown>:0
at Server.DualSaveStrategy+<Save>c__AnonStorey18.<>m__42 () [0x00000] in <filename unknown>:0
at System.Threading.Thread.StartInternal () [0x00000] in <filename unknown>:0 Crash: Generating report...done
Unfortunately an error has not occurred again when I tried to do the same steps (after restarting the server)
I still thinks abouth this record -735452.12:02:09.3940020
Same -735452 with current time are in each log.
Next, I check all our test toon in all accounts and I found one with crazy disguise record -735452 and current time on properities. I looked that this toon are member of NPC Thieses Guild and join ...... 0001.01.01 00:00:00 ????? . Lool. Mayby its a good shot
So Next I check all other test toon, selected all which are member of theves guild and check disguise and guild join data. Each other got a proper record .
So I del this toon because we cannot change this elements of it and now our logs looks like this:
Core: Using dual save strategyWorld: Saving...(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:18:40.7499980(((Timer)entry.Value).Next - DateTime.UtcNow) is 01:25:03.9989990saved (((Timer)entry.Value).Next - DateTime.UtcNow)
14:22:46 Closing Save Files.
14:22:46 Save finished in 0,15 seconds.
Perhaps this will solve the problem. 'll Let you know