-
Discussioni
996 -
Registrato il
-
Ultima visita
-
Minicoin
303 [Dona]
Tipo di contenuto
Profili
Forum
Calendario
Blog
News
Bug Tracker
FAQ
Guide
Contest
Galleria
Risorse
Negozio
Idee
Contenuti creati da Emax
-
-
-
-
-
-
-
Incontro tra Zona2 e Zona1 (Postcard #16)
Emax ha commentato un immagine nella galleria inserita da Emax nella sezione Screenshots
- 2 commenti
-
- alberi
- costruzione
-
(e altri 6)
Contrassegnati con:
-
Incontro tra Zona2 e Zona1 (Postcard #16)
Emax ha inserito un'immagine della galleria in Screenshots
- 2 commenti
-
- alberi
- costruzione
-
(e altri 6)
Contrassegnati con:
-
Wops, mi sono dimenticato di dirti che una volta collegato ci vuole qualche momento prima che venga visualizzato! Infatti ora vedo che hai il badge!
-
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). 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
-
Ciao, sei sicuro di aver collegato il tuo account Telegram con il portale? In caso ti sia dimenticato puoi farlo qui: https://hytale.it/telegram/
-
Hytale, Creazione ai massimi livelli.
Emax ha risposto alla discussione di Sammezix in Discussioni Generali
Pienamente d'accordo quando dici che questo sarà un gioco della community, non vedo l'ora di mettere le mani sul server e iniziare a implementare tutte le modalità di gioco che ci vengono in mente -
Sezione sbagliata, qui ci si presenta.
-
-
In cosa?
-
-
Benvenuto!
-
-
-
-
-
- costruzione
- wallpaper
-
(e un altro)
Contrassegnati con: