Posted by Monochrome 3 years ago (Source)
tl;dr We've recalculated every Guild's score for this season to correct for an earlier bug, and we'll be changing everyone's numbers on live to match this Saturday, Feb 3rd, before scoring starts again.
Part One: what happen?
Late in the development of Kay, we made some improvements to the way Siphoning Mages spawned, changing it from checking every hour, to having a proper spawn queue. In the course of implementing this, a mistake was made where, when dropping from four Mages present to three, it would calculate a spawn queue starting from when the previous Mage spawned, rather than from when the latest one was killed. This meant that, if at least three hours had passed since the last kill, killing one would cause an immediate respawn - and if twelve hours had passed, all four could be killed, respawned and killed again. On top of this, the points calculated for the owner at the end of each territory's prime time would calculate based on when each Mage should, by this math, have spawned, rather than when the actual spawn event occurred. (This is because we have a system in place to "catch up" in cases where the server is down when things should've happened, so that you don't miss out on points because of an extended downtime or server crash or what have you.) This meant that, if you start the day with four Mages, and they're all killed just before the end of your prime time, you can score twice the intended amount of points for the day.
Additionally, while doing corrective calculations (see below), we discovered another, smaller bug, where the catch-up mechanism was calculating an extra scoring event for castles during downtime (they score every ten minutes, so they need to be caught up when the server comes up every day so as not to lose time).
The first bug (Mages and territories) was fixed on January 17th, and the second (castles) on February first.
Part Two: what have we done since then?
In addition to fixing the bugs, we've also been working on correcting scores.
What we have done is to recalculate the points that every Guild *should* have scored since the beginning of the season, using logs for Mage kills and territory ownership (including castles). This means stepping forward through each day, tracking Mage counts based on when they should spawn and when they were killed, but skipping over any Mage kills that occurred when the number of Mages present should have been zero. This seems to us like the fairest way to calculate accurate points; it does mean that some kill opportunities that should have been present, weren't, but on the whole it should capture what would have happened. At the end of each simulated day we additionally calculate owner points based on corrected Mage presences, and also throughout the day we score castle points for Guilds holding them.
The output of this process is a list of Guild IDs (all calculations and checks were done looking at IDs, which are long hexadecimal strings, rather than Guild names, to ensure we weren't thinking about which Guilds were being affected while doing the calculations) and a points correction for each.
Part Three: what are we doing next?
This Saturday, February 4th, is the next territory reset day. Some time between scoring ending for the last territories at 0900 UTC and beginning again for the first ones at 1800UTC, we will correct each Guild's points scores using the numbers generated as above. We will also be correcting token amounts, taking into account bonus tokens from crossing ranking boundaries where the change pushes a Guild back below a boundary. In some cases this may put token amounts into the negative (if you've eg withdrawn all your tokens); this will just mean that any tokens you score will count back up towards zero before carrying on into positive numbers. (Naturally, you cannot withdraw tokens until the number rises above zero again.)
This should mean that, when scoring starts again for the final segment of Season 1 (don't forget, double points during this segment!), everyone's points should be where they would've been if the bugs had never happened.