Elke club in Goal Legends wordt geleid door een persoon of door de AI. Tot deze week was er geen pad van de eerste groep naar de tweede: als een manager stopte met inloggen, bleef zijn club gewoon staan. Faciliteiten werden nooit geüpgraded, de transfermarkt bewoog niet voor hem en niemand anders kon de club ooit overnemen, omdat niets in de code ooit de eigenaar van een club had gewist. We wilden een manier waarop clubs weer tot leven kunnen komen zonder iemands seizoen te schrappen in de eerste week dat hij stil werd.
Het schema
Drie drempels, allemaal gemeten vanaf de laatste keer dat een manager echt iets deed in de app:
- 30 dagen: een „we missen je”-mail en inboxbericht. Nog geen gevolgen, alleen een duwtje.
- 83 dagen: een waarschuwing dat de club over precies 7 dagen wordt herverdeeld, met uitleg wat dat betekent.
- 90 dagen: de club wordt echt vrijgegeven. Hij kan weer worden geclaimd via Club claimen, precies zoals voordat iemand hem bezat, met embleem en geschiedenis intact.
Op het moment dat een club wordt vrijgegeven, zakt elke faciliteit meteen twee niveaus. Als hij drie dagen later nog steeds niet is geclaimd, zakt hij nog een niveau, en daarna elke drie dagen opnieuw, met nul als ondergrens, totdat iemand hem claimt of er niets meer te verliezen is. Een verwaarloosde club hoort er verwaarloosd uit te zien. Hem claimen stopt het verval meteen: het niveau van de faciliteiten op het moment dat je hem claimt, erf je.
De bug die we bijna uitbrachten
Het voor de hand liggende signaal voor „is deze manager actief” is zijn laatste login. Dat is ook fout. Het logincookie van ASP.NET verlengt zichzelf elke keer dat je de site gebruikt met nog twee weken, stilletjes en zonder nieuwe loginmelding. Een manager die elke tien dagen even langskomt zou dus nooit een nieuwe loginrij krijgen en volgens LastLoginAt blijvend inactief lijken, terwijl hij gewoon regelmatig speelt. We hebben een tweede veld toegevoegd, LastActiveAt, dat bij gewone paginaladingen wordt bijgewerkt en niet alleen op het inlogscherm, juist zodat dit niemands club kon afpakken terwijl hij er nog was.
Afmelden zonder de club te verliezen
Elke inactiviteitsmail bevat een uitschrijflink met één klik: geen login nodig, want juist iemand die geen mail wil, wil misschien ook niet opnieuw inloggen. De link gebruikt de Data Protection API van ASP.NET om het id van de manager te verzegelen in een manipulatiebestendig token, zodat de link zonder sessie werkt en niet kan worden vervalst om iemand anders uit te schrijven. Klikken schakelt de mails direct uit. De herverdeling zelf schakelt hij bewust niet uit: je afmelden voor mail is een communicatievoorkeur en geen vrijstelling voor een club die 90 dagen inactief is en weer in omloop gaat.
