Houmgaor
4ad0012f62
fix(handlers): guard GetBoostTimeLimit against past boost_time
...
Live-server testing via protbot surfaced an inconsistency between
GetBoostTimeLimit and GetBoostRight: on the same character, the
former reported a far-future boost limit (2288912640 = year 2042)
while the latter correctly reported "expired / available". The two
handlers read the same boost_time row and disagreed.
Root cause: GetBoostTimeLimit was doing a naked uint32(int64) cast
on boostLimit.Unix(). The test character's boost_time was actually
year 1906 (a pre-1970 sentinel left behind by the pre-#187 bug),
whose negative int64 Unix timestamp wraps through uint32 to a huge
positive value the client interprets as a permanently active boost.
Harmonise the guard with GetBoostRight: return 0 whenever the stored
boost_time is not strictly after TimeAdjusted(), covering both the
pre-1970 wraparound and the "already expired" case.
Add a healing migration (0011_fix_stale_boost_time) that NULLs out
any boost_time column older than 1970 or more than 10 years in the
future, so affected characters recover on upgrade without waiting
for a fresh boost start.
Regression test uses the exact year-1906 value observed on the live
frontier.mogapedia.fr test account.
2026-04-06 18:26:15 +02:00
..
2026-04-06 18:04:34 +02:00
2026-02-27 17:29:32 +01:00
2026-02-27 17:29:32 +01:00
2026-03-17 19:21:55 +01:00
2026-03-23 10:57:01 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 18:09:08 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-04-06 18:26:15 +02:00
2026-04-06 18:26:15 +02:00
2026-02-26 23:41:44 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-03-21 19:38:16 +01:00
2026-03-23 10:15:25 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-23 21:28:30 +01:00
2026-02-27 13:45:56 +01:00
2026-02-23 21:28:30 +01:00
2026-02-23 18:24:54 +01:00
2026-02-26 23:41:44 +01:00
2026-02-23 18:24:54 +01:00
2026-03-17 19:21:55 +01:00
2026-03-19 10:57:09 +01:00
2026-02-24 13:55:49 +01:00
2026-02-22 18:55:31 +01:00
2026-03-05 18:00:30 +01:00
2026-03-18 12:09:44 +01:00
2026-03-18 12:09:44 +01:00
2026-04-06 16:22:23 +02:00
2026-04-06 16:16:05 +02:00
2026-02-26 23:41:44 +01:00
2026-03-18 23:19:25 +01:00
2026-03-10 11:28:11 +01:00
2026-04-06 18:04:10 +02:00
2026-02-24 14:13:20 +01:00
2026-02-24 13:55:49 +01:00
2026-03-05 16:39:15 +01:00
2026-03-02 19:43:11 +01:00
2026-02-26 23:41:44 +01:00
2026-02-27 11:33:25 +01:00
2026-02-24 14:13:20 +01:00
2026-02-27 11:33:25 +01:00
2026-02-24 14:13:20 +01:00
2026-03-02 19:43:11 +01:00
2026-02-26 23:41:44 +01:00
2026-03-05 18:00:30 +01:00
2026-03-06 00:15:53 +01:00
2026-03-05 18:00:30 +01:00
2026-03-03 18:04:33 +01:00
2026-02-26 23:41:44 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-26 23:41:44 +01:00
2026-02-27 11:33:13 +01:00
2026-03-19 10:57:09 +01:00
2026-02-24 15:34:51 +01:00
2026-03-19 14:35:38 +01:00
2026-03-19 14:35:38 +01:00
2026-02-22 18:55:31 +01:00
2026-02-24 14:13:20 +01:00
2026-02-24 00:05:56 +01:00
2026-03-05 18:00:30 +01:00
2026-03-05 16:39:15 +01:00
2026-03-23 22:20:32 +01:00
2026-03-23 22:20:32 +01:00
2026-03-19 10:57:09 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-22 16:05:25 +01:00
2026-03-17 19:03:43 +01:00
2026-02-26 23:41:44 +01:00
2026-04-06 16:45:56 +02:00
2026-03-19 10:57:09 +01:00
2026-03-23 10:57:01 +01:00
2026-03-02 20:12:39 +01:00
2026-03-02 20:12:39 +01:00
2026-03-19 10:57:09 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-03-23 10:57:01 +01:00
2026-02-22 18:55:31 +01:00
2026-02-26 23:41:44 +01:00
2026-02-26 23:41:44 +01:00
2026-03-23 22:20:32 +01:00
2026-03-23 22:20:32 +01:00
2026-02-26 21:57:40 +01:00
2026-03-17 19:11:59 +01:00
2026-03-23 22:20:32 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-03-05 16:39:15 +01:00
2026-02-26 23:41:44 +01:00
2026-03-19 10:57:09 +01:00
2026-02-23 21:28:30 +01:00
2026-02-27 11:33:13 +01:00
2026-02-27 11:21:37 +01:00
2026-03-19 10:57:09 +01:00
2026-03-23 11:06:50 +01:00
2026-03-23 22:00:06 +01:00
2026-03-05 23:05:55 +01:00
2026-03-18 12:14:31 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-04-06 18:04:10 +02:00
2026-04-06 18:04:10 +02:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-18 12:09:44 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-04-06 17:48:12 +02:00
2026-04-06 17:48:12 +02:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-02-22 16:42:03 +01:00
2026-03-02 19:43:11 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:42:03 +01:00
2026-02-22 16:55:59 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-18 12:09:44 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-21 19:38:16 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-05 23:05:55 +01:00
2026-03-23 10:57:01 +01:00
2026-04-06 17:48:12 +02:00
2026-03-18 11:35:31 +01:00
2026-03-18 11:35:31 +01:00
2026-02-24 16:12:40 +01:00
2026-02-27 11:33:25 +01:00
2026-03-10 11:28:11 +01:00
2026-03-10 11:28:11 +01:00
2026-02-24 14:13:20 +01:00
2026-02-24 00:05:56 +01:00
2026-02-24 14:13:20 +01:00
2026-02-24 00:05:56 +01:00
2026-02-24 16:07:37 +01:00
2026-02-24 16:07:37 +01:00
2026-02-23 19:34:30 +01:00
2026-03-23 11:06:50 +01:00
2026-04-06 17:48:12 +02:00
2026-02-23 21:28:30 +01:00
2026-03-23 11:06:50 +01:00
2026-03-06 00:15:53 +01:00
2026-02-23 21:28:30 +01:00
2026-02-26 23:41:44 +01:00
2026-02-23 21:28:30 +01:00
2026-02-24 16:12:40 +01:00
2026-04-06 17:48:12 +02:00