De onzichtbare bewaker, en verbanningen die zichzelf eindelijk uitleggen 👁️
Een tijdje geleden schreven we hier over kindvriendelijk ontwerp: melden, feedback en een waakzaam oog. Eerlijk gezegd was dat waakzame oog het zwakste onderdeel: we konden meldingen ontvangen, maar we konden amper zien wat er in een wereld echt gebeurde. Daar hebben we aan gewerkt, met twee bouwstenen: een waarnemersmodus voor toezicht en een volledig vernieuwd verbanningssysteem dat getroffen spelers eindelijk vertelt wat er aan de hand is.
Waarnemersmodus. Als er een melding binnenkomt (“iemand bouwt onzin”, “iemand schrijft gemene dingen”), kunnen we die wereld nu binnengaan zonder iets te verstoren. Echt onzichtbaar ook, niet het soort “teken mij alsjeblieft niet” dat een aangepast spel gewoon kan negeren. De server houdt de waarnemer helemaal voor zichzelf: geen avatar, geen geparkeerd schip, geen geclaimd landingsplatform, geen afdaalanimatie, geen huisdieren, geen speeder, geen bezette spelersplek en geen verandering in het aantal spelers. Voor iedereen in die wereld is er letterlijk niemand. Vliegen gaat dwars door muren (anders kom je nooit in een dichtgemetselde basis), wezens negeren de waarnemer en schieten kan sowieso niet.
Kijken betekent kijken. De waarnemer mag niets in de wereld aanraken, met precies één uitzondering: blokken afbreken. Dat is de enige hefboom waarmee een beledigend bouwsel echt uit een wereld verdwijnt, en elke verwijdering wordt vastgelegd. In de chat is de waarnemer gedempt; jezelf bewust tonen vraagt een apart commando. En een permanente SPECTATOR-badge staat de hele tijd op het scherm: je moet nooit per ongeluk denken dat je normaal speelt.
Waarom het zo streng is gebouwd. Twee beslissingen die van buitenaf onzichtbaar zijn maar voor ons belangrijk. Ten eerste: de waarnemersrol wordt niet in het savebestand opgeslagen, maar bij elke toetreding opnieuw uit de serverconfiguratie berekend. Saves kun je downloaden en elders weer uploaden: een opgeslagen toezichtsrol zou meereizen, naar machines die niet van ons zijn. Ten tweede: het is geen wereldoptie. Wie een wereld bezit, mag het toezicht op die wereld niet kunnen uitschakelen. Daarom hangt het ook niet aan de instelling “admin-cheats”, die werelden standaard toch al uit hebben staan.
Uitzoeken waar iets gebeurde. Daarvoor zijn er nieuwe commando's: /players toont wie online is, en iedereen die ooit in deze wereld heeft gespeeld; /builds toont waar iemand heeft gebouwd; /where leidt je naar een speler; /goto springt ook over planeten heen (de oude teleport zette alleen coördinaten en liet je op de verkeerde planeet vallen 🙈). Daarnaast leest een overzichtspagina in ons beheerpaneel rechtstreeks uit de wereldopslag: spelers, bouwwerken en “bouwhotspots”. Zo vind je een huis dat iemand zonder basiskern midden in het niets heeft neergezet. En elke gewijzigde cel onthoudt nu wie hem het laatst aanraakte en wanneer. Voordat we dat inbouwden, hebben we gemeten wat het aan opslag kost: geen enkele extra rij in de database, want opslag gebeurt toch al per cel.
Ook in privéwerelden, achter een dubbel slot. De eerste versies hadden een absurd gat: de onzichtbare waarnemer kon alleen openbare werelden zonder wachtwoord bereiken, precies die waar het minst gebeurt. Kinderen spelen bijna altijd in privéwerelden waarvan het wachtwoord in een vriendenkring rondgaat. Het toezicht reikt nu dus ook daar. Om te voorkomen dat dat een achterdeur wordt, is de toegang dubbel vergrendeld: je hebt een operatoraccount nodig dat alleen kan worden aangemaakt met een geheime code, en de speciale spelersnaam daarvoor, die systeembreed is gereserveerd en die niemand anders kan registreren of gebruiken. Ontbreekt een van beide, dan gebeurt er helemaal niets.
En dan de verbanningen. Dit werd vroeger echt slecht afgehandeld: een verbannen account kon gewoon normaal inloggen en de muur verscheen pas bij het betreden van een wereld, zonder reden, zonder datum en zonder manier om iets te vragen. Vanuit de speler gezien was het spel gewoon kapot. Nu laat het inloggen zelf al zien hoe het ervoor staat, en er is een berichtenbox: “je wereld is verwijderd (reden)”, “je verbanning is opgeheven”. Dat bericht wordt geschreven op het moment dat er iets gebeurt: later bestaat de informatie niet meer, want een verwijderde wereld is nu eenmaal weg.
Een time-out in plaats van een verbanning voor altijd. Verbanningen zijn nu in de eerste plaats tijdelijk, standaard drie dagen. Een verlopen time-out telt bij elk controlepunt als “niet verbannen”, dus “drie dagen eruit” kan nooit stilletjes uitgroeien tot een permanente uitsluiting. De vermelding blijft wel bewaard voor de geschiedenis. Redenen komen als vaste categorieën (chat, griefing, valsspelen, naam, overig) die in het Duits en Engels vertaald worden getoond, en als een mens er iets aan toevoegt, verschijnt dat letterlijk, precies zoals getypt. Het belangrijkste van alles: het bericht kan de dag noemen waarop je weer welkom bent.
Wereldeigenaren kunnen hun eigen wereld nu modereren. Als je een wereld bezit, krijg je dezelfde hefboom voor jouw wereld: je eigen banlijst, even betrouwbaar afgedwongen als de onze. Die onthoudt het account (dus van naam veranderen helpt niet) en de naam in het spel (arcadegasten hebben helemaal geen account). Je kiest uit een lijst van mensen die de wereld echt hebben bezocht: namen met de hand typen is precies hoe je het verkeerde kind blokkeert. En omdat een verbanning alleen de volgende toetreding bepaalt, is er ook kicken: de speler belandt meteen terug in het menu, met een reden, in zijn eigen taal. Het bericht gaat uit voordat de verbinding sluit, zodat een aangepast spel het niet kan negeren en gewoon doorspelen.
Wat we bewust niet hebben gebouwd. De voor de hand liggende zet tegen het omzeilen van een ban zou apparaatherkenning zijn (“nieuw account, zelfde pc”). Die hebben we afgewezen, om drie redenen: de identificatiecode verandert zodra er een USB-stick wordt aangesloten of Windows een grotere update doet; een aangepast spel kan hem in vijf minuten vervalsen; en identiek ingerichte schoolcomputers zouden er allemaal hetzelfde uitzien. Dan is er nog het juridische deel: het uitlezen van een apparaat-ID vereist volgens het Duitse recht toestemming, die onder-16-jarigen niet geldig kunnen geven. Toezicht mag geen surveillance worden. En nog een regel die in de code is vastgelegd: het operatoraccount zelf kan noch worden verbannen noch worden gekickt, anders zou het toezicht van binnenuit kunnen worden uitgezet.
Dit alles zit al in de code en gaat live met de volgende serverupdate. We hopen oprecht dat we het zo zelden mogelijk nodig hebben. 🌟
Opmerkingen