Mark Abent ha abbandonato l’Around the Verse ed è ora a capo di una serie completamente nuova incentrata sulla risoluzione dei bug di Star Citizen. Ecco a voi Bugsmashers!


Mark voleva iniziare la sua carriera in solitaria, ed è stato irremovibile sull’avere uno spettacolo tutto per sè. Per cui eccovi l’episodio inaugurale di Bugsmashers!

 

Articolo originale disponibile presso le Roberts Space Industries.


Cittadini! Benvenuti al primo episodio di Bugsmashers.

Bugsmashers ed il suo mite, ma leggermente fuori di testa presentatore Mark Abent sono stati a lungo parte dell’Around the Verse.

Tuttavia questa settimana la CIG ha deciso che le mura dell’Around the Verse non sarebbero state in grado di contenere questo particolare marchio di pazzia, e lo hanno trasformato in uno spettacolo a se stante!

Vi riportiamo di seguito la trascrizione del primo episodio.

Bugsmarsher Episodio 1 – con Mark Abent

Salve a tutti, e benvenuti al nuovissimo Bugsmashers: finalmente avrò uno spettacolo tutto mio. Sono riuscito ad ottenere il mio spinoff, seguendo la tradizione dei grandi spinoff come Joey, Caprica e Lone Gunman, e vi assicuro che sarà bellissimo: sono pronto a spaccare qualche bug.

Innanzitutto, abbiamo un divertente, piccolo bug multiplayer. Sulla mia sinistra c’è il mio server dedicato, ed alla mia destra ho tre client collegati, e potete vedere lo stato di ciascuno di essi, tutti pronti per giocare.

Questo bug si verifica quando uno dei giocatori decide di eiettarsi e si disconnette immediatamente dal gioco: quando questo accade, gli altri due giocatori non sono più in grado di fare nulla. Dunque vediamo cosa succede.

Diciamo a questo ragazzo qui di eiettarsi, e successivamente ci disconnetteremo, per cui vediamo cosa ci dirà il server.

Guardate, sono tutti in-game. Il nostro ragazzo sta galleggiando, ed è disconnesso. E’ una situazione piuttosto brutta, perché se adesso dicessi a questo tizio di eiettarsi per poi aspettare la finestra del respawn, e respawnare, non farà nulla. Perché? Beh, sfortunatamente il server sta ancora cercando di disconnettere l’altro tizio, che quindi sta bloccando il primo pg. Il giocatore quattro è disconnesso, il giocatore due sta ancora cercando di respawnare, ma il povero, vecchio giocatore quattro sta ancora cercando di disconnettersi e così facendo blocca completamente il respawn del giocatore 2. Yaaay, sistemi multi-thread.

Dunque.

Cosa starà succedendo? Beh, scopriamolo.

Chiudiamo il nostro server dedicato e spegnamo tutte le nostre piccole, divertenti istanze di SC. Woooo.

Bene, ora tutto è spento. Allora, cosa sta succedendo? Andiamo a controllare un’area divertente del codice. Doo doo doo, doo doo, doo doo.

Quando il client decide che dovrebbe essere rimosso dal gioco crea questo piccolo processo qui, che comunicherà l’ordine di rimozione al sistema di immagazzinamento dati. E quest’ultimo deve fare le sue cose prima di cancellare il giocatore e quindi rimuovere il processo sopraccitato. Dunque, eccoci nel nostro piccolo sistema di immagazzinamento dati: il nostro pg verrà qui, lo farà, il sistema sta girando, ed abbiamo un giocatore online perché abbiamo le sue informazioni ed il suo stato non è disconnesso, è in-game.

Non analizzeremo nel dettaglio questa sezione, ma andremo a guardare quest’altra area del codice. Imposteremo lo stato di disconnessione, creeremo un thread, e questo fondamentalmente pulirà le informazioni sul giocatore, rimuoverà tutti i suoi veicoli, i suoi oggetti, qualsiasi elemento che sia connesso a lui, chiuderà alcune sezioni del codice, e quindi tutto dovrebbe essere a posto, e ripulito. Giusto?

Il problema è che…

Non sarò mai una stella della televisione.

Discolando (suppongo) – Hai avuto il tuo show.

Dopo un milione di richieste.

Quello che succede realmente è che viene creato un altro di questi processi, e se seguiamo la stesso logica, arriviamo qui, e uho… Il nostro ‘stato’ è già settato su ‘in disconnessione’: adesso invocheremo la funzione, cancelleremo il giocatore, ma ci sarà ancora il thread attivo, per cui semplicemente lasceremo perdere il giocatore, dato che abbiamo creato un nuovo processo, ma adesso il client disconnesso si sta incasinando, perché sta cercando di elaborare tutto, perché il giocatore non è più qui, ed io sono bloccato ed il sistema sta dando i numeri.

Ora, questo processo potrebbe essere stato creato per vari motivi. Il primo, siamo stati disconnessi, il secondo, abbiamo chiuso il client e sta cercando di pulire, per cui questo processo potrebbe venire creato diverse volte, ma vogliamo assicurarci di non cancellare il giocatore fino a quando non saremo pronti.

Per cui quello che faremo sarà mantenere l’informazione sul giocatore, ed il database persistente farà la stessa cosa; nel momento in cui chiuderemo tutto, il giocatore non sarà più in questa lista. Se è nella lista, invece, vogliamo assicurarci che si trovi nel thread di disconnessione, di non crearne uno nuovo, ma non vogliamo neppure creare un altro giocatore.

Per cui daremo un codice di errore… Aspettate. Ma se qualcuno decidesse di creare un altro processo, sebbene ne sia già stato creato uno, questo cancellerebbe il processo, ma non ucciderebbe il giocatore. Ma il primissimo si, lo farebbe. Per cui dovremmo essere al sicuro. Se qualcuno decidesse di avviare un altro processo per cancellare il giocatore, dovrebbe aspettare fino a quando l’intero procedimento non sarà concluso. Ed una volta che sarà terminato, cancellerà effettivamente il giocatore da questa lista, per cui quando saremo disconnessi il processo non sarà più attivo, e permetterà al codice di continuare a funzionare. Ma anche allora, quando avremo terminato, continuerà a richiamare il processo, per cui potrete invocare questa funzione di rimozione tante volte quanto vorrete, e comunque non cancellare il giocatore prima che sia necessario.

Allora proviamo a far girare questo tizio. Bene, ora ho tutti i tre client connessi ed il mio server dedicato è online, per cui proviamo ad eiettarci e disconnetterci.

Ora, se abbiamo risolto questo problema… Eccolo, è passato dallo stato in-game a quello di disconnessione dal gioco. Per cui è stato possibile prenderlo e rimuoverlo in maniera sicura, non c’è stata nessuna cancellazione durante il procedimento, e tutto dovrebbe essere a posto.

E… Eiettiamoci, questo pg dovrebbe essere in grado di respawnare, doo doo doo doo, aspettiamo di premere il pulsante X e…

Sta respawnando, woooo-hoo.

Ci è voluto un po’ perché ho un debugger attivo che rallenta il processo, ma è stato abbastanza veloce.

Per cui eccoci qua. Un piccolo divertente bug, risolto. Multi-threading. Questi sono sempre divertenti. Multi-threading CON il multiplayer.

Dunque, come avete visto abbiamo giocato con un piccolo divertente bug sul multi-threading che cancellava il giocatore prima che il nostro database fosse in grado di ripulirsi. Abbiamo appena detto a tutti di fermarsi, aspettare un minuto fino a quando non avremo ripulito le informazioni sul giocatore, e quindi lo abbiamo cancellato come avremmo dovuto.

Comunque, spero che vi sia piaciuto il nostro nuovo, piccolo formato: il nuovissimo Bugsmashers.

Se avete dei commenti, delle domande, degli insulti e cose simili, fatecelo sapere: leggiamo i vostri post, a volte dobbiamo rileggerli, e quindi rileggerli di nuovo, ma sicuramente li leggiamo.

Woooo!

Traduzione a cura di Darnos.
Trascrizione originale disponibile presso ImperialNews.