Vai al contenuto

Analisi del codice visto nel trailer


Emax
 Condividi
Link


Messaggi consigliati

  • 🔥 Founder

SPOILER: roba tecnica che forse non interessa a nessuno

Ciao a tutti, era da un po' che volevo fare questo post per parlare del codice intravisto nel trailer di Hytale, nello specifico al secondo 112, dove possiamo vedere un player che sta creando uno script da applicare ad un mob (un Goblin).

im1.PNG.69895b8ce57315070534f406b404faf9.PNG

Partiamo dall'interfaccia, la cosa che si nota subito è che l'editor si chiama "Trigger Editor", per i neofiti della programmazione si intende trigger una funzione che ascolta un particolare evento, per chiarificare:

  • Un evento può essere una qualsiasi cosa programmata nel gioco, ovvero l'inizio della pioggia è un evento, un mob che muore è un evento etc, in poche parole qualsiasi azione (anche non del player) all'interno del mondo di gioco può essere considerata un evento.
  • Un trigger è un particolare codice che ascolta un determinato evento e richiama una funzione
  • Una funzione è un insieme di codice che fa qualcosa ?
  • Uno script è un insieme di funzioni

Poi abbiamo diversi campi:

  • Name abbastanza chiaro, è il nome dello script che stiamo creando.
  • Script Type: CUSTOM questo è davvero interessante, custom significa che stiamo facendo uno script personalizzato, ma quali altri tipi di script possono essere presenti?
  • Tick Speed (millis): -1 per me questo è abbastanza chiaro, indica ogni quanti millisecondi lo script deve essere eseguito, pensatela così mettiamo il caso di fare uno script che toglie la pioggia nel mondo, se non impostassimo questo valore lo script verrebbe eseguito una volta sola, ma ovviamente avrebbe poco senso poiché con il passare del tempo in gioco la pioggia tornerebbe, ora pensiamo allo stesso caso dove lo script viene eseguito ogni secondo… addio pioggia! nel caso dello screenshot il valore è impostato a -1 ovvero lo script deve essere eseguito una sola volta poiché verrà richiamato automaticamente quando si verificherà un evento di cui è in ascolto (in questo caso collisioni con altre entità).
  • Links lavoro di fantasia perché non abbiamo nessuna informazione, ho tre teorie per il significato di questo valore
    • Script collegati, ovvero il nome degli script collegati a questo.
    • Eventi collegati, ovvero il nome degli eventi collegati a questo script.
    • Link Web, ovvero il link del sito web del proprietario dello script.
  • Flags potrebbe indicare qualsiasi cosa, in genere in informatica per flags si indica un insieme di proprietà necessarie per fare qualcosa, ad esempio potrebbe indicare che questo script può essere eseguito solo quando piove, ovvero la pioggia potrebbe essere una proprietà necessaria per attivare lo script
  • Preview del mob essendo questo script un trigger associato al mob nell'editor c'è l'anteprima del suddetto, questa cosa è davvero interessante, perché far vedere il mob nello script? ovvio perché dallo script possiamo modificare il modello del mob, mi spiego magari ci danno la possibilità da script di aggiungere o togliere pezzi al mob, Goblin a 3 teste in arrivo!
  • Infine i pulsanti sotto, sono abbastanza chiari, ci permettono di caricare/salvare/eseguire/cancellare lo script.

Arriviamo al pezzo forte, il codice nell'editor!

var GameMode = com.hypixel.hytale.protocol.Gamemode;
var Player = com.hypixel.hytale.server.core.entity.entities.Player;

exports = {
  onCollide : function(entity)
  {
    if (entity instanceof Player)
    {
      entity.setGameMode(GameMode.Adventure); // Sets the mode to adventure
    }
  }
}

// www.hytale.it/supersecretpage

exports = {
  onCollide : function(entity)
  {
    if (entity instanceof Player)
    {
      entity.teleport(0,0,0); // Moves player to origin
    }
  }
}

// www.hytale.it/supersecretpage

Analizziamolo linea per linea (tanto non abbiamo niente da fare nel frattempo)

Intanto salta subito all'occhio che si tratta di JavaScript! sicuramente la scelta del linguaggio di scripting è stata molto difficile, ne esistono tanti ma i più gettonati sono JavaScript e LUA, scelta che a mio parere sembrerebbe confermata da quello che già sappiamo ovvero che il server di Hytale sarà scritto in Java e il client in C# e cos'hanno in comune questi due linguaggi di programmazione? hanno delle ottime librerie per interpretare JavaScript.

Proseguiamo dunque all'analisi del codice, vi dico già da subito che il codice è sbagliato, immagino ne abbiano messo uno a caso come placeholder per il trailer, ma comunque vale la pena di darci un occhio! farò del mio meglio per essere chiaro! (Spoiler: non ci riuscirò)

var GameMode = com.hypixel.hytale.protocol.Gamemode;
var Player = com.hypixel.hytale.server.core.entity.entities.Player;

Le prime due linee sono degli import, ovvero importano delle funzioni dalle classi del gioco, in questo caso viene importata la classe del giocatore e la gamemode (che sospetto sia un enumerazione), interessante vedere la struttura dei package (l'alberazione del codice nelle cartelle), che suppongo sia speculare fra client e server visto gli script vengono eseguito da entrambi i lati.

Prima incoerenza: la sintassi dell'import è errata.

Seconda incoerenza: se notate la classe del player si trova dentro un package di nome server, il che non ha molto senso visto che il player è presente anche in single player.

exports = {
  onCollide : function(entity)
  {
    if (entity instanceof Player)
    {
      entity.setGameMode(GameMode.Adventure); // Sets the mode to adventure
    }
  }
}

Questo blocco di codice esporta una funzione al di fuori dello script per essere richiamata dal gioco, in questo caso la funzione è un trigger che viene attivato quando il mob (Il Goblin) collide con un entità, dopodiché viene verificato che l'entità sia un giocatore e a quest'ultimo viene cambiata la modalità di gioco in avventura.

exports = {
  onCollide : function(entity)
  {
    if (entity instanceof Player)
    {
      entity.teleport(0,0,0); // Moves player to origin
    }
  }
}

Successivamente viene esportata questa funzione che è identica a quella sopra ma con una piccola differenza invece di cambiare la modalità di gioco al giocatore (gioco di parole) lo teletrasporta a una posizione specifica ovvero X0, Y0, Z0.

Terza incoerenza: in JavaScript il blocco export può essere dichiarato una volta sola per script.

Quarta incoerenza: è stata dichiarata due volte una funzione con lo stesso nome "onCollide" altra cosa non permessa.

Siamo arrivati alla fine dello script, in poche parole sembra quando il Goblin entri in contatto con un giocatore questo venga messo in modalità avventura e venga teletrasportato a delle coordinate specifiche. pensandoci un secondo questo sembra più il comportamento di un portale che di un mob...

In conclusione non sappiamo ancora niente del linguaggio di scripting che verrà usato in Hytale, io sono estraneamente fiducioso che alla fine terranno Javascript, vista la popolarità e il quantitativo di tutorial presenti, però non ci metterei la mano sul fuoco :uccello:


Collezionabili

  • Link al commento
    Condividi su altri siti

    • 2 settimane dopo...

    Ciao Emax. Piccola precisazione prima di entrare nel merito della tua analisi. Quell'entità, come si evince dalla Concept-Art 16, si chiama probabilmente Klop, i quali sono nettamente differenti sia per aspetto che per comportamento dai Goblin. Infatti saranno neutrali o amichevoli verso il giocatore, e saranno probabilmente dei commercianti.

    Detto questo e premesso che me ne intendo sicuramente meno di te in merito alla programmazione, suppongo che "Flags" possa essere anche usato per indicare un elenco di tag.

    Comunque davvero interessante la tua analisi. Il portale il cui codice è stato preso per questo screenshot, suppongo possa essere il portale finale di qualche dungeon della storia. Rimettendo il giocatore in adventure (se questa è equivalente alla survival di mc) indica che con tutta probabilità il player prima non era nella suddetta modalità ma in una apposita per i dungeon. Altresì, non ne ho idea, visto che il player non cambia dimensione o altro.

    Comunque io ho capito tutto in modo abbastanza chiaro e non vedo l'ora di metterci le mani sopra e pasticciare. Grazie per questa analisi.

    Link al commento
    Condividi su altri siti

    Crea un account o accedi per commentare

    Devi essere un utente per poter lasciare un commento

    Crea un account

    Registrati per un nuovo account nella nostra comunità. è facile!

    Registra un nuovo account

    Accedi

    Hai già un account? Accedi qui.

    Accedi ora
     Condividi
    Link


    ×
    ×
    • Crea nuovo/a...

    Informazione importante

    Benvenuto su Hytale Italia, procedendo alla navigazione acconsenti ai seguenti documenti: Politica sulla Privacy, Termini di utilizzo, Abbiamo inserito cookie sul tuo dispositivo per contribuire a migliorare questo sito web. Puoi modificare le impostazioni dei cookie, altrimenti supponiamo che tu possa continuare.