RPG Zone, Italian Forum & Community for role playing video games - ex Gothic Zone

[Tutorial] Daedalus e struttura di Gothic.dat Parte 2, Lezione 4b

« Older   Newer »
  Share  
view post Posted on 17/2/2015, 17:51     +1   +1   -1

Gothic Modder

Group:
Moderatore
Posts:
1,391
Rpg Point:
+83
Location:
L'Urbe!

Status:


Questa è la conclusione della precedente lezione sull'introduzione a daedalus, il linguaggio di scripting di gothic.

Quindi, ricapitolando il post precedente le parole chiave (cioè che non possono essere usate in nessun altro contesto a parte quello originale e i commenti) sono:
CITAZIONE
class const else float func if

instance int prototype return

string var void

Bene, dopo aver quindi visto le parole chiave, e la sintassi generale di daedalus vediamo quali sono le operazioni built-in (native) di questo (debole) linguaggio. Per operazioni intendo quindi tra variabili e/o costanti:

Operatori di calcolo: +, -, *, /, % (addizione, sottrazione, moltiplicazione, divisione, modulo)

Operatori di comparazione: <, <=, >, >=, == , != (minore, minore o uguale, maggiore, maggiore o uguale, uguale*, diverso)

*questa non è un'uguaglianza di assegnazione, cioè assegno alla variabile x questo valore; ma una comparazione cioè controllare se una variabile/costante è uguale ad un altra

Tutti gli operatori di comparazione ritornano o vero o falso, e sono usati nelle condizione if-else.

Operatori booleani: !, &&, || (non, e, o)

Questi sono gli operatori booleani di cui vi parlai due lezioni fa. Anche questi ritornano o vero o falso.

Operatori di bit (insiemistici): &, | (e/intersezione, o/unione)

Questi operatori ritornano un intero che va inteso non come un semplice numero, ma come l'unione (in bit) dei due valori. Per esempio 3 | 4: immaginate due insiemi contenenti un singolo valore ciascuno, 3 e 4. L'unione tra questi due valori genera un insieme contenente entrambi. Questo in daedalus è registrato come un semplice altro numero intero. Su questo numero però possiamo fare altre operazioni insiemistiche. Per esempio molto banalmente se chiamiamiano il nuovo isieme a, a & 3 darà come risultato 3; perché l'intersezione di un insieme contenente 3 e 4 e un altro insieme contenente 3 è un insieme contenente solo il numero 3.

Vediamo ora qualche esempio pratico:

CODICE
var int a;
var int b;

a = 4;
b = 3;

Print(a + b);      //stampa a schermo il valore di a + b, cioè 7

if(a == 7)    //se a è uguale a 7, allora..
{
   Print("a è 7");
}
else    //Altrimenti..
{
   Print("a non è 7");
}
/* questa condizione stamperà "a non è 7", perché è in realtà 4 */

a *= b;

if(a == 12)    //se a è uguale a 12, allora..
{
   Print("a è 12");
}
else
{
   Print("a non è 12");
}
/* questa condizione stamperà "a  è 12", perché non solo abbiamo eseguito la moltiplicazione, ma abbiamo anche assegnato il valore ottenuto ad a scrivendo a *= b. Una scrittura equivalente è infatti a = a * b */

if((a == 12) && (b == 3))    //Se a è uguale a 12 E b è uguale a 3, allora
{
   Print("Corretto!");
}
else if(((a == 12) && (b != 3)) || ((a != 12) && (b == 3)))    //Altrimenti se a è uguale a 12 E b è diverso da 3, OPPURE a è diverso da 12 E b è uguale a 3, allora..
{
   Print("Uno dei due è giusto");
}
else //Altrimenti.. (cioè tutti e due diversi)
{
   Print("Entrambi sbagliati");
}
/*Notate bene qui come ho costruito le condizioni. In particolare guardate le parentesi del secondo punto. Funziona esattamente come nell'algebra: prima le parentesi più interne e via via quelle più esterne. Fate i "calcoli" con vero e falso utilizzando gli operatori booleani e controllate il risultato. Questo stamperà "corretto!" */

if !(a != 12)
{
   Print("corretto!");
}
/* Sorpresa, questo stamperà corretto! Perché? Perchè gli sto dicendo "se a NON è diverso da 12" (ergo è uguale a 12) "allora.." */


Come al solito una volta imparata come funziona la logica filerà tutto liscio come l'olio. Questo immagino possa essere l'argomento un po' più arduo quindi per qualsiasi dubbio scrivete pure qui sotto.


Passiamo oltre e per concludere vediamo un po' la struttura delle cartelle di gothic.dat. Per quanto riguarda i fini della compilazione non è importante dove posizionate i vostri file, tuttavia è utile mantenere la distinzione per una maggiore pulizia di codice.

  • _Intern: cartella contenenti file fondamentali per il corretto funzionamento di gioco. NON CAMBIATE NULLA IN CLASSES.D, e, se non sapete cosa state facendo, nemmeno in constants.d

  • _misk_: cartella a dir la verità inutile, contenente un singolo file, contenente a sua volta una singola funzione mai chiamata nel gioco. Nel dubbio non eliminare. Se avete aggiunto qualche file particolare nella vostra mod che non sta bene da nessun altra parte, mettetelo qui.

  • AI: cartella contenente tutte le funzioni dei comportamenti di mostri e npc


    • AI_Intern: costanti e funzioni di base dell'IA. State attenti quando modificate

    • Human: comportamenti degli NPC

    • Magic: comportamenti di NPC e mostri per quanto riguarda la magia e magie stesse

    • Monster: comportamenti di mostri

    • Test_Scripts: file di debug e test

  • Items: cartella contenente tutti gli oggetti

  • Story: cartella contenente funzioni relative alla storia, npc, mostri e dialoghi

    • B_AssignAmbientInfos: contenente i dialoghi ripetitivi di NPC generici (senza nome)

    • B_Content: contenente funzioni relative alla storia che riguardano in genere il mondo di gioco

    • B_GiveTradeInv: assegnazione degli inventari dei mercanti

    • B_Storycontenente funzioni relative alla storia che riguardano in genere gli NPC

    • Dialog_Mobsi: contenente tutti i "dialoghi" degli oggetti interattivi

    • Dialoge: contenente tutti i dialoghi

    • Events: contenente la gestione degli eventi innescati dal mondo di gioco

    • G_Functions: contenente funzioni chiamate direttamente dal motore di gioco

    • Log_Entries: contenente informazioni e stato di missioni

    • NPC: contenente le istanze di NPC e mostri

    • NPC_Scripts: contenente delle funzioni per la gestione degli NPC


Ultima cosa: a differenza di altri linguaggi di programmazione seri, daedalus non è case sensitive, quindi non fa distinzione tra maiuscole e minuscole. Tutta via è buona norma utilizzare le seguenti impostazioni:
CODICE
func int MiaFunzione()    //Ogni parola inizia con la maiuscola

var int miavariabile         //Tutto minuscolo

const int MIACOSTANTE      //Tutto maiuscolo



Bene per ora è tutto. È stata una lezione piuttosto lunga e impegnativa pure per me, non so se sono stato molto chiaro, non sapevo come porvi alcuni argomenti :P
Se avete dubbi ripeto non esitate a chiedere. Nella prossima lezione vedremo più in dettaglio gli npc e i dialoghi.

Ciao :camberman.gif: :camberman.gif:

Torna all'indice delle lezioni



Edited by Frank-95 - 15/10/2015, 13:39
 
Top
view post Posted on 18/2/2015, 11:06     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


Finalmente ho finito di leggere tutte le lezioni!!
CITAZIONE
È stata una lezione piuttosto lunga e impegnativa pure per me, non so se sono stato molto chiaro, non sapevo come porvi alcuni argomenti

Per essere lunga lo è stata XD. E non ti preoccupare sei stato abbastanza chiaro, perlomeno io ho capito tutto, non a memoria ma ho capito, ma io conosco gia la logica di programmazione dato che programmo in java e JS ma come ho letto quei pezzetti di codice cambia davvero poco da java.

Non basarti su il mio commento ma aspetta commenti di altri utenti che non hanno mai programmato.

P.S. In certe righe sbagli a scrivere nel senso "cortella" al posto di "cartella" ma riguardo la disposizione degli argomenti non ho nulla da commentare...complimenti.
 
Top
view post Posted on 18/2/2015, 11:33     +1   -1

Gothic Modder

Group:
Moderatore
Posts:
1,391
Rpg Point:
+83
Location:
L'Urbe!

Status:


Si lo so, ho persino riletto tante volte ma qualche errore di battitura mi esce sempre fuori :P
 
Top
view post Posted on 18/2/2015, 11:42     +1   -1
Avatar

Advanced Member

Group:
Rpg Veteran
Posts:
1,300
Rpg Point:
+58
Location:
Khorinis, Quartieri alti

Status:


C'è da compatirti dopo tutte quelle pagine di guida e il cervellamento per far capire gli altri con parole piu comprensibili possibili è logico che si va in tilt xD
 
Top
3 replies since 17/2/2015, 17:51   109 views
  Share