I have grown to like the idea of the timers for the horse training and daily quests being based on a set time each day and I know that was done to help boost server performance.
From there, I got to thinking, what if the same thing was done with researching item traits?
Obviously, there are a few things that would need to be adjusted for that to happen, specifically, the length of time it takes to research new traits. Instead of counting the time in days and hours, it would just count in days, then any time saved from things like ESO plus, would always reduce it by whole days.
You can find the current research times
here
A possible suggestion for how much time it could take to research each trait is the following:
1st trait = 1 day
2nd trait = 2 days
3rd trait = 3 days
4th trait = 4 days
5th trait = 5 days
6th trait = 8 days
7th trait = 16 days
8th trait = 32 days
9th trait = 64 days
For traits 3 through 9, this would increase the combined research time by about 2.83 days, and for the first two traits it would take the combined time from 1 day to 2 days (combined) leaving the total increase at 3.83 days. However, this would also mean that if the players start their research closer to the time of the server reset at O dark 30 in the morning then they will easily be able to cut a lot of that time off. For example, if a player logged on an hour before the time when the horse training and daily quests currently reset, and started their next traits researching, an hour later, their research times would decrease by a day. This would have the benefit of making it less critical for when the player logs on to start new research, thus making it feel like less of a chore for the player to research all of their traits. It would have the added benefit of dramatically reducing the number of checks the server would have to complete for each researched item. The remaining time would then go from all research timers starting at random times of the day to just needing to track how many days are remaining in the research.
There are 4 main types of reseach (metal, cloth, wood, jewelry) and when fully maxed out, each of those (with the exception of jewelry) research types can have 3 active traits that can be researched at any one time. Jewlery has at most 1 type that can be researched. Thus, that is a total of 13 traits that can be researched per player at any given time.
According to the
MMO population website ESO has an active daily player base of 219,021 players. If we assume that only 10% of those are actively researching traits that would mean 21,902 players are actively researching traits. That would mean that at any one time, the servers are keeping track of a potential 284,726 separate timers. By switching the research to daily ticks, you can then remove every one of the timers and instead put ticks that would just be counted down.
A simple example of how this could look (if implemented in Python) could be as follows:
def Trait_Research_Tracker (research_length):
research_length -= 1
return research_length
That is built assuming the data is stored in a queue data structure, and able to be pulled out in O(1)
1 time. It is also built under the assumption that it would be returned back into the same queue data structure for processing later. And from there, each time server moves from one day to the next it will run this function and reduce the remaining count of days for each item being researched. The same concept could be done with a dictionary, and a separate function could pull out the remaining days from each player's dictionary (obviously stored in a class), and from there, nearly 300,000 timers are reduced to a once a day function that pulls a value from a dictionary, subtracts one from it, and updates the value afterwards. And the remaining time left would simply involve pulling the remaining days from the dictionary and placing it before the same timer that shows how much time you have left before you can train your horse next.