Guida <Guida>Creare una nuova funzione Lua per le quest

Stato
Discussione chiusa ad ulteriori risposte.

_Erich_

Utente Bronze
9 Ottobre 2012
9
3
8
49
Ultima modifica da un moderatore:
Indice:


○ Introduzione;
○ Cos'è una funzione;
○ A cosa serve creare una funzione per le quest;
○ Preparazione al lavoro;
○ Primo Passo;
○ Secondo Passo;
○ Terzo Passo;
○ Testiamo insieme;
○ Ricapitolando;
○ Riconoscimenti.


_____________________________________________


Introduzione


Salve, con questa guida vi insegnerò a creare una nuova funzione utilizzabile per creare le nostre quest. Il procedimento è abbastanza semplice, ma cerchiamo di capire nel dettaglio a cosa ci stiamo riferendo.


_____________________________________________


Cos'è una funzione


Una funzione è una "relazione" (non saprei come altrimenti definirla) che ad un valore di un insieme restituisce un valore di un'altra funzione. Per fare un esempio, la funzione "pc.give_exp(x)" restituisce un dato valore ai file di gioco che corrispondono all'esperienza "x" al personaggio che sta eseguendo lo script.
Potete trovare tutte le funzioni del file game e del questlib nel file "quest_functions" nella cartella "../game/share/locale/location/quest/".


_____________________________________________


A cosa serve creare una funzione per le quest


Creare una nuova funzione può essere utile a diversi fini: principalmente lo scopo è quello di semplificare i nostri script. Questo perché, a mio parere (e di molti altri), per diventare dei bravi Coder, una cosa fondamentale è l'ordine.


_____________________________________________


Preparazione al lavoro


Per quanto riguarda l'editor, consiglio Notepad++ in quanto è possibile, tramite un pannello, impostare un linguaggio di lettura (nel nostro caso LUA) che aiuta molto a tenere ordine nello script evidenziando le seguenze e macro-seguenze, commenti al testo, comandi registrati, etc.
I file che dobbiamo modificare per creare una nuova funzione e poterla utilizzare sono:
• questlib.lua;
• quest_functions;
• inforge.quest[¹].


[¹]: per testare una "funzione esempio" creata per questa guida, creeremo un file chiamato "
inforge.quest" e lo posizioneremo nella directory ./quest/ della nostra macchina, la stessa di origine degli altri 2 file.


_____________________________________________


Primo Passo


Il primo passo è preceduto da un pre-primo passo (o_O): scegliere il nome della nostra funzione, per questa guida io scelgo "nabbizza()".
Fatto il pre-primo passo, passiamo all'azione vera e propria.
Apriamo il file "questlib.lua" in "../game/share/locale/location/quest/" e facciamoci un po' di spazio tra gli script facendo ben attenzione a non toccarli, di soltio conviene mettersi a scriptare all'inizio o alla fine del file. Per comodità, io metto il segno del testo all'inizio, prima della prima lettera e con ENTER vado giù 5 o 6 righe in modo da avere lo spazio per lavorare e non rischiare di intoccare le altre funzioni.
Per indicare che ciò che andremo a scrivere sono le specifiche della nostra funzione scriviamo:
Codice:
function nabbizza()


Facendo ciò abbiamo aperto una prima seguenza (function) che terremo a mente per chiudere poi lo script con i rispettivi comandi (end).


_____________________________________________


Secondo Passo


Ipotiziamo di voler far sì che la funzione "nabbizza()" stampi il nome del nostro personaggio preceduto da "Lo sai che " e che dopo il nome ci sia " è nabbo?". In tal modo, se il mio personaggio si chiamasse "zeiph", ed in uno script eseguissi "nabbizza()", il risultato sarebbe che mi verrebbe stampato «Lo sai che zeiph è nabbo?».
La cosa è semplice, con la parola "return [arg]" (dove "arg" è l'oggetto risultato della funzione), noi facciamo in modo che la nostra funzione restituisca qualunque cosa vogliamo.
Nel nostro caso è ancora più semplice poiché ci basta utilizzare la funzione say() e verrà eseguita come risultato della funzione nabbizza(); scriviamo:
Codice:
function nabbizza()
local nome_personaggio = pc.name()
say("Lo sai che "..nome_personaggio.." e' nabbo?")
end
Salviamo e chiudiamo.


_____________________________________________


Terzo Passo


Creata la nostra funzione, adesso dobbiamo renderla utilizzabile nei nostri script, per far ciò dobbiamo aggiungerla nel file "quest_functions" (questo file viene chiamato in causa dagli script utilizzati per compilare i fie ".quest").
Basta aprire il file, aggiungere una nuova riga e scrivere
Codice:
nabbizza()


_____________________________________________


Testiamo insieme


Con questo abbiamo finito la procedura per creare una nuova funzione; adesso proviamola!
Creiamo un file nella directory "../quest" e nominiamolo "
inforge.quest"
Scriviamo come di routine:
Codice:
quest [/COLOR][COLOR=#B22222]inforge [/COLOR][COLOR=#b22222]begin
state start begin
when login begin[/COLOR][COLOR=#b22222]
[/COLOR]

Con questo codice diciamo:
Missione
inforge inizia seguenza,
Stato missione start (lo status iniziale di tutte le quest) inizia,
Quando chiunque (non essendo specificato) effetua il login inizia.
È il punto adatto per testare la nostra funzione, quindi scriviamo:
Codice:
nabbizza()
Infine chiudiamo tutte le seguenze iniziate (quest, state e when) utilizzando 3 end, salviamo il file, lo compiliamo (di solito basta eseguire il file "./quest/qc [arg]").
Chiudiamo e riapriamo i processi dei file di gioco, logghiamo e leggeremo «Lo sai che "il mio personaggo" e' nabbo?».


_____________________________________________


Ricapitolando


Riassumendo ecco il codice da aggiungere in "../game/share/locale/?zone?/quest/questlib.lua" per creare la funzione nabbizza():
Codice:
function nabbizza()
local nome_personaggio = pc.name()
say("Lo sai che "..nome_personaggio.." e' nabbo?")
end
Dopodichè aggiungiamo la funzione nel file "../game/share/locale/?zone?/quest/quest_functions":
Codice:
nabbizza()
Infine per testarla creiamo un nuovo file "../game/share/locale/?zone?/quest/
inforge.quest" con quanto segue, lo salviamo, lo compiliamo e riavviamo i processi del gioco per testarla:
Codice:
quest[/COLOR] [COLOR=#B22222]inforge [/COLOR][COLOR=#b22222]begin
state start begin
when login begin
nabbizza()
end
end
end[/COLOR]


_____________________________________________


Riconoscimenti


Questa guida è stata interamente creata da me (non sono a casa e non potendo far nulla ho deciso di perdere un po' di tempo così) e non è stata copiata. Siete liberi di usarla e copiarla dove vi pare, sarebbe gradito che almeno citaste la fonte.
Grazie, spero che sia utile a molti,


Erich, DragoniaMetin2 Team
.:figurati:
 
Ultima modifica:
A parte che la guida è abbastanza INUTILE, non hai neanche spiegato come si fanno le funzioni con degli argomenti, o come si richiama delle variabili al di fuori di essa (globali).
comunque sia ti rispondo cosi:

Codice:
[COLOR=#a52a2a]function[/COLOR] inutile([COLOR=#0000ff]cosa[/COLOR])
[COLOR=#ff0000]print [/COLOR]([COLOR=#a52a2a]string[/COLOR].[COLOR=#ff0000]format[/COLOR]([COLOR=#ff8c00]"%s e' inutile"[/COLOR], [COLOR=#0000ff]cosa[/COLOR]))
[COLOR=#a52a2a]end[/COLOR]

Codice:
inutile([COLOR=#ff8c00]"Latuaguida"[/COLOR])
 
Sapientone almeno lui ha fatto qualcosa....

Ah quindi fare qualcosa equivale a non avere commenti negativi?
In questo thread (inutile tra l'altro) ha spuegato una cosa alla base di qualsiasi linguaggio di programmazione, e l'ha spiegato pure male.
C'è da fare i complimenti in qualcosa che trovi nel web?
Ah per la cronaca: Lua - Wikipedia
Era così difficile cercarla su wikipedia se proprio ne dovevi aver bisogno?
 
  • Mi piace
Reazioni: Artons
A parte che la guida è abbastanza INUTILE, non hai neanche spiegato come si fanno le funzioni con degli argomenti, o come si richiama delle variabili al di fuori di essa (globali).
comunque sia ti rispondo cosi:

Codice:
[COLOR=#a52a2a]function[/COLOR] inutile([COLOR=#0000ff]cosa[/COLOR])
[COLOR=#ff0000]print [/COLOR]([COLOR=#a52a2a]string[/COLOR].[COLOR=#ff0000]format[/COLOR]([COLOR=#ff8c00]"%s e' inutile"[/COLOR], [COLOR=#0000ff]cosa[/COLOR]))
[COLOR=#a52a2a]end[/COLOR]

Codice:
inutile([COLOR=#ff8c00]"Latuaguida"[/COLOR])

A chi ti riferisci? E poi certe cose andrebbero postate sulla sezione LUA (sempre se esiste)

Comunque sia nel vero LUA say() non esiste, ma esiste print()


Questa guida è stata interamente creata da me (non sono a casa e non potendo far nulla ho deciso di perdere un po' di tempo così) e non è stata copiata.
Penso basti, no? Comunque ho scritto esplicitamente che questa guida era riferita ai "neo-scripter", e credo che tutto sommato possa essere utile: il mio tentativo è quello di spiegarlo come se dovessi spiegarlo a mia nonna.

Con questo non voglio dire che non sono accettate le critiche, ma che siano costruttive. Non stai proponendo nessun'alternativa al mio "fare".


Sapientone almeno lui ha fatto qualcosa....

Grazie :)

Erich?
Beh da come fai le guidi sei "l'erich" che conosco io... Sei tornato?
Addami asterix-10

Be' sì, sono proprio io. Ho provato a recuperare il mio vecchio account ma essendomi stata disattivata la casella postale sulla quale avevo registrato l'account, non posso riaverlo :(
È bello risentirti :D


Sisi è proprio lui! il suo modo di scrivere è inconfondibile xD

Ahah, è bello risentire anche te! (sempre molto spiritoso eh!?! XD)

Ah quindi fare qualcosa equivale a non avere commenti negativi?
In questo thread (inutile tra l'altro) ha spuegato una cosa alla base di qualsiasi linguaggio di programmazione, e l'ha spiegato pure male.
C'è da fare i complimenti in qualcosa che trovi nel web?
Ah per la cronaca: Lua - Wikipedia
Era così difficile cercarla su wikipedia se proprio ne dovevi aver bisogno?

Be', se è una cosa inutile tentare di fare una guida (utile), per quanto possa essere poco dotato in argomento, dimmi tu cos'è utile; tenterò di migliorare.
Altrimenti evita di fare brutte figure.
 
Be', se è una cosa inutile tentare di fare una guida (utile), per quanto possa essere poco dotato in argomento, dimmi tu cos'è utile; tenterò di migliorare. Altrimenti evita di fare brutte figure.

La brutta figura la fai tu che posti queste baggianate, non io che te lo faccio presente :asd:
 
L'argomento è banale però sono sicuro che la metà di chi frequenta la sezione non era capace/non sa di cosa parliamo. :asd:
Bravo per aver rilasciato comunque.
 
La brutta figura la fai tu che posti queste baggianate, non io che te lo faccio presente :asd:

Ho l'impressione che tu non capisca il sistema di quotazioni nei forum, questo è ancora più grave a mio avviso... ho già risposto a questo tuo tipo d'accusa in questo modo:
« [...] non voglio dire che non sono accettate le critiche, ma che siano costruttive. Non stai proponendo nessun'alternativa al mio "fare".»
Se devi aggiungere un altro commento al mio thread, fallo in modo costruttivo perfavore! Se non ti serve la guida, non aprirla proprio, no? Il fatto che a te non serva, non significa che non sia utile; giusto?
:gtfo:


L'argomento è banale però sono sicuro che la metà di chi frequenta la sezione non era capace/non sa di cosa parliamo. :asd:
Bravo per aver rilasciato comunque.

Mai detto il contrario; grazie!
 
Ho l'impressione che tu non capisca il sistema di quotazioni nei forum, questo è ancora più grave a mio avviso... ho già risposto a questo tuo tipo d'accusa in questo modo:
« [...] non voglio dire che non sono accettate le critiche, ma che siano costruttive. Non stai proponendo nessun'alternativa al mio "fare".»
Se devi aggiungere un altro commento al mio thread, fallo in modo costruttivo perfavore! Se non ti serve la guida, non aprirla proprio, no? Il fatto che a te non serva, non significa che non sia utile; giusto?

Mi sa che non hai capito proprio nulla tu in questo caso :asd:
L'alternativa non te la devo proporre io, a me non importa un fico secco di cosa scrivi in un forum che non è mio.
Mi importa però di piazzare un bel commento negativo (sbaglio o c'è liberta di parola?) dato che la tua "guida" dato che non si può definire guida, non serve a niente.
Se poi tu ti ostini a ritenerla utile, quando ti ho mostrato io stesso che esistono spiegazioni molto più valide di ciò che è una funzione, affari completamente tuoi. Una cosa è certa però, non è di questi thread che ha bisogno questo forum ed in particolare questa sezione, quindi non soffermarti sul fatto "io faccio qualcosa, se a te non serve esci" perchè se tutti la pensassero così il forum diventerebbe un porcilaio e già lo è anche grazie a questo thread.
 
Mi sa che non hai capito proprio nulla tu in questo caso :asd:
L'alternativa non te la devo proporre io, a me non importa un fico secco di cosa scrivi in un forum che non è mio.
Mi importa però di piazzare un bel commento negativo (sbaglio o c'è liberta di parola?) dato che la tua "guida" dato che non si può definire guida, non serve a niente.
Se poi tu ti ostini a ritenerla utile, quando ti ho mostrato io stesso che esistono spiegazioni molto più valide di ciò che è una funzione, affari completamente tuoi. Una cosa è certa però, non è di questi thread che ha bisogno questo forum ed in particolare questa sezione, quindi non soffermarti sul fatto "io faccio qualcosa, se a te non serve esci" perchè se tutti la pensassero così il forum diventerebbe un porcilaio e già lo è anche grazie a questo thread.

Il tuo italiano si commenta da solo. Proprio come il tuo intelletto:
«esistono spiegazioni molto più valide di ciò che è una funzione», questo non lo metto in dubbio, ma questa non è una guida che spiega "ciò che è una funzione", bensì, come forse il tuo intelletto non ha capito e come spiega ESPLICITAMENTE il titolo, è una guida che spiega come «Creare una nuova funzione Lua per le quest».

Ti sei buttato abbastanza m***a in faccia o vuoi continuare?
A me non costa niente; non è difficile mettere in evidenza la tua incoerenza e deficienza (intesa nel senso stretto del termine "mancanza d'intelligenza", non vuol'essere un'offesa).
 
Come guida, riguardante la creazione di funzioni in lua, è abbastanza indecente:

  1. Cos'è una funzione
    Una funzione è una "relazione" (non saprei come altrimenti definirla) che ad un valore di un insieme restituisce un valore di un'altra funzione. Per fare un esempio, la funzione "pc.give_exp(x)" restituisce un dato valore ai file di gioco che corrispondono all'esperienza "x" al personaggio che sta eseguendo lo script.
    Il concetto di funzione da te fornito non sta nè in cielo nè in terra. (ma in quale libro-merendina hai letto una simile spiegazione?)
    Una definizione più decente può esser trovata qua: https://it.wikipedia.org/wiki/Funzione_(informatica)
    In sintesi: Una funzione è un blocco di istruzioni a cui viene passato una lista di parametri/argomenti e può esser impostato per avere un valore di ritorno. (poi si potrebbe anche parlare di riusabilità del codice ed altre minchiate)
  2. In alcune parti il BBCode del post è alla cdc (vedesi i vari CODE) e senso di stile pari a 0
  3. Nel lua è possibile dichiarare molti tipi di funzioni! Tu ti sei limitato a spiegare il tipo più inutile. (no return, no parameter-list)
  4. Frasi come "diventare bravi Coder" fanno abbassare ancora di più la qualità già "compromessa" della guida. (idem per quanto riguarda le faccine "like a child")
  5. Ti stai lagnando con Nicoso per il suo italiano ma: Hai mai pensato di installarti un dizionario d'italiano sul tuo browser per evitare aborti come "ipotiziamo" (vuole 2 z) o "seguenze" (sequenze), ripassarti la grammatica per non creare periodi infiniti con millemila virgole e tante altre cose?

    PS. Hai scritto, precedentemente, che questa "guida" è indirizzata a chi inizia per la prima volta a scriver codice in lua:
    Adatta i vari esempi (e non solo) come farebbe un libro/manuale di programmazione! (tra l'altro, molte frasi son ricche di eufemismi no-sense che farebbero confondere pure un plurilaureato)
  6. Qual'è il vero motivo di questa guida-troll sul lua? Semplice! Far sapere a tutti che fa parte di un server! Like a genius.
  7. ma questa non è una guida che spiega "ciò che è una funzione"
    Ecco un altro "Like a genius".
    Hai creato una sezione nella guida dove spieghi cosa sia ma, appena una persona ti critica, cambi subito tutte le carte in tavola ed insulti in modo random. Figata colossale.
 
Come guida, riguardante la creazione di funzioni in lua, è abbastanza indecente:

  1. Il concetto di funzione da te fornito non sta nè in cielo nè in terra. (ma in quale libro-merendina hai letto una simile spiegazione?)
    Una definizione più decente può esser trovata qua: https://it.wikipedia.org/wiki/Funzione_(informatica)
    In sintesi: Una funzione è un blocco di istruzioni a cui viene passato una lista di parametri/argomenti e può esser impostato per avere un valore di ritorno. (poi si potrebbe anche parlare di riusabilità del codice ed altre minchiate)
  2. In alcune parti il BBCode del post è alla cdc (vedesi i vari CODE) e senso di stile pari a 0
  3. Nel lua è possibile dichiarare molti tipi di funzioni! Tu ti sei limitato a spiegare il tipo più inutile. (no return, no parameter-list)
  4. Frasi come "diventare bravi Coder" fanno abbassare ancora di più la qualità già "compromessa" della guida. (idem per quanto riguarda le faccine "like a child")
  5. Ti stai lagnando con Nicoso per il suo italiano ma: Hai mai pensato di installarti un dizionario d'italiano sul tuo browser per evitare aborti come "ipotiziamo" (vuole 2 z) o "seguenze" (sequenze), ripassarti la grammatica per non creare periodi infiniti con millemila virgole e tante altre cose?

    PS. Hai scritto, precedentemente, che questa "guida" è indirizzata a chi inizia per la prima volta a scriver codice in lua:
    Adatta i vari esempi (e non solo) come farebbe un libro/manuale di programmazione! (tra l'altro, molte frasi son ricche di eufemismi no-sense che farebbero confondere pure un plurilaureato)
  6. Qual'è il vero motivo di questa guida-troll sul lua? Semplice! Far sapere a tutti che fa parte di un server! Like a genius.
  7. Ecco un altro "Like a genius".
    Hai creato una sezione nella guida dove spieghi cosa sia ma, appena una persona ti critica, cambi subito tutte le carte in tavola ed insulti in modo random. Figata colossale.

Caro mio, il tuo di concetto di funzione è limitato alla programmazione. Io spiegavo semplicemente il significato generale di "funzione" (tra l'altro non come oggetto della guida ma come integrazione, ed è il motivo per il quale ho detto che questa guida non l'ho creata per spiegare il significato di funzione) e ti invito ad andarlo a rivedere.
Per quanto riguarda il senso di stile, ci sto, i gusti sono gusti; i tuoi saranno strani ma li accetto.

Ah, permettimi una commento sul tuo tentativo di leggere la psicologia altrui: hai scritto "Qual'è" (si scrive qual è, ed in questo caso a quanto pare il tuo broswer o plugins annessi non t'aiutano :lol: ) "il vero motivo di questa guida-troll sul lua?" (..non è sul lua, credo si sia capito ormai..) "Semplice! Far sapere a tutti che fa parte di un server! Like a genius." (purtroppo il mio corpo non è composto da circuiti e se lo fosse per dimostrarlo farei una fotografia).
Ero nello staff di server privati da Clubmt2 (clubmt2, finalongju, metinit, etc etc), faccio guide su metin da prima che si diffondessero i server Cinesi, e tu mi vieni a dire che io faccio una guida per "far sapere a tutti che fa parte di un server!"... "like a genius." hai aggiunto... sinceramente fai un po' pena.
IIl buon senso, quello, o ce l'hai oppure...

Hai fatto fortuna pubblicando due queries per mettere i libri negli shop degli insegnanti dottrina (lo ricordo bene), hai fatto fortuna sfruttando proprio l'utenza che tanto adesso vorresti rimanesse nell'ignoranza ed incapace di fare qualcosa da soli. Non mi fare andare avanti, avrei molte cose sul tuo conto da scrivere
 
Stato
Discussione chiusa ad ulteriori risposte.