neverwinteritalia - Neverwinter Nights 1

Posts written by Tukaram

  1. .
    Nella trilogia che sto rifacendo con i bcm e ampliando, gli henc sono ben definiti nell'arco della storia. Non può capitare che il pg non sia con un henc per il quale prevedo la conv ;)
  2. .
    CITAZIONE (Lord Ariall @ 14/11/2010, 06:40) 
    CODICE
    void main(){
    object oPC=GetExitingObject();
    int iQ=GetLocalInt(OBJECT_SELF,"attivatorebis");
    if((GetIsPC(oPC)==TRUE)&&(iQ==FALSE)){
    object oStr=GetObjectByTag(GetLocalString(OBJECT_SELF,"tagpng"));// tagpng e' il NOME della variabile nell'attivatore segnare il tag del png
    float fDist=GetDistanceToObject(oPC);
    SetLocalInt(OBJECT_SELF,"attivatorebis",TRUE);
    ApplyEffectToObject(DURATION_TYPE_TEMPORARY,EffectCutsceneParalyze(),oPC,4.0f);
    AssignCommand(oStr,ClearAllActions());
    AssignCommand(oStr,ActionForceMoveToObject(oPC,TRUE,fDist,30.0f));
    DelayCommand(0.5,ActionDoCommand(AssignCommand(oStr,ActionStartConversation(oPC,GetLocalString(OBJECT_SELF,"conversazione")))));} //segnare con nome conversazione la vera conversazione
    else{return;}}


    cosi è come gli incontri random o le frasi random.

    Alla fine credo che questo sia al caso mio. Non avevo capito cosa volesse dire Ariall, ma rileggendo ho capito che faccio un unico script in onenter dell'attivatore e poi nell'attivatore setto due variabili:
    tagpng -- string -- TAG DEL PNG
    conversazione -- string -- TAG DELLA CONVERSAZIONE

    Lo script lo lascio così com'è senza toccare nulla, così che sia unico per ogni conv o npg che debba parlare.
  3. .
    Bè nell'attivatore devo cmq mettere la variabile col tag della conv no? Ad ogni modo avrei cmq settato a zero le altre variabili e lasciato solo quella col tag della conv e il tag dell'henc.
  4. .
    Ottimo. Non serve per il multy, ma per il single per fare partire conv con gli henc ;)
  5. .
    La variabile once che è? Lo script, dove lo metti? La stringa col tag è il tag del png?
  6. .
    Benvenuto ;)
  7. .
    Si, me ne ricordo. Ne parlaste o sul suo forum, o su chronicles. ;)
  8. .
    CITAZIONE (magobargle @ 8/12/2015, 15:14) 
    ... e gli hai pure colorato i titoli :P, ottimo.

    Beho era un tipo davvero in gamba, è un vero peccato che non si sia più fatto vedere.

    Concordo, ed era una persona disponibilissima!
  9. .
    ;) fatto!
  10. .
    Una interessante guida scritta da Beho che aiuta nelle fasi iniziali del modding su Neverwinter Nights.

    FAQ (Frequently Asked Questions)
    Aurora Toolset - mini guida ai comandi e allo scripting
    di free.it.giochi.neverwinternights

    v 1.5 del 03/01/2004

    a cura di:
    Gruppo di Coordinamento free.it.giochi.neverwinternights
    +------------------------------------------+
    | Prima stesura curata da: Beho |
    | Revisione a cura di: Beho |
    | Hanno collaborato: |
    | Daedalus | Z.E.R.O. | Beho | Gazza |
    +------------------------------------------+
    Indice:

    1) Prefazione

    2) Il manifesto

    3) Che cosa è l'Aurora toolset

    3.1) Sezioni dello schermo

    3.2) Terminologia di base
    3.2.a) Modulo
    3.2.b) Area
    3.2.c) PNG / NPC
    3.2.d) PG / PC
    3.2.e) DM
    3.2.f) Palette
    3.2.g) Tile
    3.2.h) Tileset
    3.2.i) ResRef
    3.2.l) TAG
    3.2.m) Differenze tra TAG e ResRef
    3.2.n) Blueprint
    3.2.o) Custom Blueprint
    3.2.p) Come si crea un Custom Blueprint
    3.2.q) Trigger/Attivatori
    3.2.r) Custom Content

    3.3) Conversazioni
    3.3.a) Possibilità di Conversazione
    3.3.b) Token e Action
    3.3.c) Come colorare una parte di conversazione

    3.4) Il Diario
    3.4.a) Come creare un diario delle quest
    3.4.b) Come collegare un evento del diario ad una conversazione

    4) Tipi di file modificabili in NWN

    4.1)Estensioni
    4.1.a) ERF
    4.1.b) 2DA

    4.2) HakPack
    4.2.a) Come si inserisce un hakpack in un modulo
    4.2.b) Come si crea un HakPack
    4.2.c) Come si aggiorna un HakPack
    4.2.d) Strumenti utili

    4.3) Filmati
    4.3.a) Come si crea e converte un filmato per NWN
    4.3.b) Strumenti utili

    5) Cosa è l'aurora scripting

    5.1) Eventi
    5.1.a) Eventi del modulo
    5.1.b) Eventi dell'area
    5.1.c) Eventi della creatura
    5.1.d) Eventi dei posizionabili
    5.1.e) Eventi degli attivatori
    5.1.f) Evento custom: OnUserDefined

    5.2) Errori comuni di compilazione

    -----------------------------------------------------------

    3) Che cosa è Aurora
    Sebbene Aurora stia ad indicare il motore grafico 3d isometrico di NWN (Bioware Aurora Engine), si usa questo termine per considerare gli attrezzi di creazione di campagne e moduli che sfruttano a pieno regime questo motore grafico (Bioware Aurora Toolset).
    Oltre ad essere il primo motore grafico 3d che Bioware pubblica (tutti gli altri titoli Bioware usano il motore 2d isometrico "Infinity"), Aurora ha una caratteristica molto importante, che fa perdonare il fatto che non sia tra i migliori motori 3d in circolazione dal punto di vista grafico: è totalmente modulabile.
    Questo significa che chiunque può aggiungergli qualcosa, come nuove creature, nuove texture, e poi applicarli con la massima semplicità. Un uomo, in Aurora, non è intero: gli si possono staccare/cambiare braccia, corpo, bacino, gambe, piedi, testa e altro.
    Stessa cosa vale per i vestiti e per le armature, per le armi e in genere per ogni cosa.
    Personalizzare la propria armatura è molto facile, grazie all'interfaccia a portata di qualsiasi utente.
    Le creazioni guidate (dei mercanti, delle conversazioni, ecc.) permettono di creare la propria avventura senza grosse difficoltà.
    Il linguaggio degli script è basato sul C, cosa che rende relativamente semplice la composizione dei comandi, ma nello stesso tempo li rende capaci anche di sovvertire molte regole di AD&D 3ª ed.
    Per i principianti è incluso lo Script Wizard, una creazione guidata che guiderà i "neofiti" alle creazioni di semplici avventure.
    C'è solo un difetto esistente in Aurora: è che non supporta bene l'asse Z, quindi non si possono creare terreni totalmente irregolari o far volare il proprio personaggio.
    Da un punto di vista tecnico, Aurora è tra i motori grafici che usano maggiormente 3dsMax (www.discreet.com/products/3dsmax)
    Ciononostante, grazie allo zelo di molti fans, esistono script di importazione/esportazione anche per GMax (www.discreet.com/products/gmax ,
    versione ridotta e gratuita di 3dsMax), per Milkshape 3d (www.swissquake.ch/chumbalum-soft , progettato inizialmente per
    Half-Life) e per Lightwave 3d (www.lightwave3d.com/ , forse il migliore programma esistente).
    Con uno dei programmi descritti sopra, e con un po' di pratica, chiunque potrà disegnare nuove armi, nuovi oggetti e nuove creature al di fuori dei contenuti ufficiali che Bioware rilascia.
    Una volta appresa la logica degli script e imparato a modellare in 3d, l'unico limite effettivo, in Aurora, è la fantasia.
    Beho
    07 May 2004, 23:49
    3.1) Sezioni dello schermo
    All'apertura del toolset ci si ritroverà davanti ad una serie di sezioni ognune delle quali ha una sua utilità nell'ambito della creazione del modulo.
    L'area è divisa in 4 sezioni, ognuna con una usa funzione specifica:

    A. Barra strumenti - Lista di comandi e preferenze - In alto nello schermo.
    B. Tavolozza - Dove sono elencati tutti i contenuti che è possibile collocare nel modulo - A Destra dello schermo.
    C. Contenuto del modulo - Una lista ordinata di tutto ciò che hai già inserito all'interno del tuo modulo - A destra dello Schermo.
    D. Visualizzazione dell'area - Dove svolgi la maggior parte del lavoro sul tuo modulo - Nel Centro dello schermo.

    Per una spiegazione più approfondita delle barre visitate questo link:
    http://nwn.bioware.com/builders/toolsetintro3.html

    3.2) Terminologia di base

    3.2.a) Modulo
    l'intera avventura che hai creato. Contiene tutte le locazioni, le aree e le creature che hai incluso nella tua avventura.


    3.2.b) Area
    Un luogo determinato all'interno del modulo, come per esempio la locanda, il castello malvagio o le caverne sotterranee.

    3.2.c) PNG / NPC
    Personaggio Non Giocante (Non Player Character). Qualsiasi personaggio che non sia controllato da un giocatore: un venditore, un bandito, un monello di strada e così via.

    3.2.d) PG / PC
    Personaggio Giocante (Playing Character). Un personaggio dell'avventura controllato da un giocatore vero e proprio.

    3.2.e) DM
    Dungeon Master. La persona che controlla il gioco e tutto ciò che contiene. Il DM è una cosa diversa dal Creatore del Modulo, dato che questi costruisce materialmente il Modulo, mentre il DM lo controlla intanto che i giocatori lo stanno giocando. Naturalmente il Creatore del Modulo e il DM possono anche essere la stessa persona: crei un modulo e poi lo giochi assieme a degli amici.

    3.2.f) Palette
    In italiano Palette si traduce come "Tavolozza". Il termine tavolozza viene usato per indicare il pannello dove ogni cosa che puoi aggiungere o 'disegnare' in un'area viene conservato. Per esempio, nel Gruppo Strumenti compare una lista di mostri, raccolti in un punto specifico dello schermo, dalla quale puoi scegliere quali inserire in un'area del tuo modulo; quella è la tavolozza dei mostri. Devi selezionare un mostro dalla tavolozza per inserirlo nel tuo modulo.

    3.2.g) Tile
    L'elemento più piccolo di un set di riquadri che può essere disegnato in un'area. Per esempio, la locanda è un riquadro separato del set di riquadri rurali che puoi disegnare nella tua area rurale.

    3.2.h) Tileset
    Un gruppo di riquadri che segue un tema conduttore. Per esempio, il set di riquadri della foresta comprende i riquadri degli alberi, delle rovine di pietra, del corso d'acqua, dell'accampamento ecc., insomma tutto ciò che è possibile trovare in una foresta.

    3.2.i) ResRef
    ResRef = RESource REFerence. Il ResRef è univoco per ogni "progetto" già presente o creato nel toolset. Questa univocità è indispensabile per il motore grafico per gestire correttamente posizionamento, respawn, comportamento degli oggetti (inteso a livello di grafica 3d, non di intelligenza artificiale). Un ResRef non può superare i 16 caratteri di lunghezza altrimenti tronca il nome e può contenere solo caratteri minuscoli compresi tra a_z e 0_9 e il caratterespeciale _ (underscore). Un ResRef è modificalbile solo al momento della creazione di un nuovo progetto o durante la modifica di un progetto preesistente.

    3.2.l) TAG
    Il TAG è un Nome identificativo utile per identificare più istanze dello stesso progetto. Il TAG Non è univoco ed è normalmente modificabile nel corso dello sviluppo del modulo. Il TAG di ogni singola istanza dello stesso ResRef può essere diverso.

    3.2.m) Differenze tra TAG e ResRef
    Il ResRef è univoco per ogni blueprint sia che sia scelto tra quelli di default dell'aurora toolset sia se viene creato ad hoc...quindi se si creano più istanze dello stesso blueprint hanno, per forza, lo stesso ResRef. Mentre il tag di ogni singola istanza dello stesso ResRef può essere diverso.

    3.2.n) Blueprint
    In italiano si traduce come Progetto e sta ad indicare tutti quelli oggetti comunemente chiamati "posizionabili" tra quelli che offre il toolset (dai mostri agli oggetti, dai generatori di incontri a quelli di mercanti e così via).

    3.2.o) Custom Blueprint
    Letteralmente= Progetto Personalizzato. Viene usato per indicare tutti quelli oggeti posizionabli che sono stati modificati o creati da zero partendo da un progetto (blueprint) presente nel toolset.

    3.2.p) Come si crea un Custom Blueprint
    Fondamentalmente esistono 3 sistemi per creare un blueprint.

    A. Modificando un progetto già inserito nel modulo
    B. Modificando un progetto già esistente tra quelli esistenti nella Tavolozza (punto 3.1)
    C. Creandolo da zero usando i tool messi a disposizione da Aurora.
    ----
    A. Modificando un progetto già inserito nel modulo
    1. Selezionare un qualsiasi modello di mostro o png che già è stato inserito nell'area di lavoro (punto 3.1)
    2. Puntare col Mouse sul modello scelto e premere il dasto destro, dal menu che ne esce fuori scelgere il comando "aggiungi alla tavolozza". Questa cosa attiverà il pannello delle proprietà del modello.
    3. Un nome unico per il blueprint (ResRef) verrà generato automaticamente, mentre il resto rimarrà uguale a quanto prestabilito in precedenza.
    4. A questo punto bisognerà scegliere dove memorizzare il nuovo blueprint all'interno della tavolozza personalizzata di quel tipo particolare di progetti.
    5. Volendo è possibile tornare nelle proprietà del Blueprint per modificare altri valori, ma non il ResRef.

    B. Modificando un progetto già esistente tra quelli esistenti nella Tavolozza (punto 3.1)
    1. Se non è già visualizzata passare alla "standard Palette" (tavolozza standard).
    2. Selezionare un progetto tra quelli presenti tra i vari contenuti (per esempio il Capo degli Zingari nel menu "disegna creature" sotto la voce PNG/Umani)
    3. Selzionare "Modifica copia" (Edit Copy) dal menù contestuale che appare premendo sul nome del progetto con il tasto destro. Questo attiverà il pannello delle proprietà del modello.
    4. Cambiare il nome dell'oggetto con uno a proprio piacimento (in caso di creature, nome e cognome possono essere genrati automaticamente premendo l'apposito pusante accanto ai box dove vanno scritti questi dati).
    5. Cambiare il nome del TAG Con uno di proprio piacere, ma facilmente ricordabile e assimilabile al tipo di progetto (per es. volendo fare un ranger si potrebbe chiamare il TAG "PNG_RANGER" o "RNG_BEhO", senza virgolette chiaramente).
    6. Memorizzare il progetto nella tavolozza personalizzata.
    7. Premete "OK" e noterete che apparirà immediatamente la tavolozza dove avete memorizzato il progetto e selezionerà il modello ppena creato.
    8. A questo punto potete posizionare il Blueprint dove volete nell'area di lavoro.

    C. Creandolo da zero usando i tool messi a disposizione da Aurora.
    (supponendo di voler creare una nuova creatura)
    1. Dalla Tavolozza personalizzata delle creature cliccare col tasto destro tenendo il puntatore del mouse su una delle voci del menù e selezionare nuovo.
    Oppure Selezionare "Creazione guidata delle Creature" (CTRL+ALT+C) dal menù "Creazioni Guidate" (in alto nello schermo). Apparirà la schermata per la creazione di una nuova creatura.
    2. Premere "Avanti" (Next) per cominciare. Selezionare la razza su "Umano" e di nuovo premere "Avanti".
    3. Scelgiere la classe e il livello preferito (meglio scegliere una sola classe e un livello basso per ora). Premendo la "X" vicino al box della classe questa verrà eliminata per quel persoanggio (tranquilli non è perenne potete aggiungerla di nuovo se vi siete sbagliati). Premere "Avanti" per continuare.
    4. Lasciando "Umano" come ASPETTO provare a vedere le differenze tra "Maschio" e "Femmina" tra le opzioni della voce SESSO. Volendo è possibile selezionare uno degli aspetti predefiniti del toolset, ma poi non sarà possibile modificare il modello a livello di vestiario (si può equipaggiarlo, ma non mostrarà le nuove vesti dategli in cambio di quelle presenti di default) e colore della pelle.
    5. Scelgiere uno tra i ritratti a piacimento e premere "Avanti".
    ATTENZIONE: tutte le creature, le porte e gli oggeti posizionabili richiedono un ritratto per continuare nella creazione del Blueprint.
    6. Lasciare la fazione a "Ostile" e proseguire avanti. Le fazioni di Default sono. Ostile, Difensore, Popolano, Mercante (quest'ultima indispensabile per creare i seguaci)
    7. Scegliere nome e cognome e premere il tasto "Avanti"
    8. Memorizzate il progetto in un posto che vi sia facile da ricordare e trovare (ad esempio Speciale | Personalizzato 1). Premete "Avanti".
    9. COntrollare sul sommario che appare che tutto sia coerente con quanto è stato creato e premere ancora "Avanti".
    10. A questo punto apparirà il tasto "Fine" che potrà essere premuto per finire di lavorare sul progetto. Se su vuole ancora migliorare il progetto del Png è possibile selezionare il checkbox "Lancia Proprietà della creatura" e proseguire a personalizzare il blueprint in questione.
    11. Selezionare il blueprint appena creato per metteterlo dove si vuole nell'area di lavoro (in posti raggiungibili però ;-p).

    3.2.q) Trigger/Attivatori
    I triggers (in italiano Attivatori) sono dei progetti particolari che servono per far accadere un determinato evento al passaggio di un PG o un PNG sopra di essi.
    Un Attivatore può essere una transizione d'area, una trappola o un generatore di mostri, e così via.
    I trigger sono contraddistinti dal fatto che bisogna disegnare un perimetro all'interno del quale, passandoci sopra, succede quanto previsto dagli script inseriti nei vari eventi del trigger.

    3.2.r) Custom Content
    I custom Contents (contenuti personalizzati) sono modelli 3d, Tileset nuovi o modificati, oggetti nuovi non presenti originariamente nel gioco e nel Toolset.

    --------------------------

    3.3) Conversazioni
    E' facilmente intuibile l'importanza delle conversazioni in un gioco di ruolo.
    Queste permettono il corretto svolgimento della missione da compiere (quest) e di far sì che il giocatore abbia le necessarie informazioni, oltre che per chiedere, impartire ordini, minacciare, e simili.

    3.3.a) Possibilità di Conversazione
    Per le conversazioni tra un PG e un PNG bisogna creare, per l'appunto, delle "conversazioni" ed associarle al PNG (non sempre, ma la maggior parte delle volte).
    Ci sono due modi:

    A- Cliccando su Strumenti --> Creazione Guidata Conversazioni
    B- Andando sulle proprietà del PNG e nel campo "conversazione" cliccando su Mod. (questa è la soluzione migliore nella maggior parte dei casi perché associa direttamente la conversazione al PNG)

    Da come dovreste intuire, sarà il PNG a parlare per primo.
    Cliccate su "aggiungi" (il tasto più in alto sulla barra in alto a sinistra) e scrivete ciò che il PNG dirà.
    Comparirà una riga con scritto [Possessore] - (quello che avete scritto).
    Il Possessore è colui al quale è stata associata la conversazione.
    Questo termine è molto importante anche nello scripting, dove viene indicato con OBJECT_SELF.
    Se salvate e nel gioco parlate col PNG, questo vi dirà ciò che avete scritto sotto forma di riga testuale sulla sua testa.
    Per continuare la conversazione (e quindi usare la finestra di conversazione) cliccate sulla riga del Possessore per selezionarla (dovrebbe apparire in rosso) e quindi ancora su "aggiungi".
    Adesso sarà il PG a parlare. Poi cliccate sulla riga del PG (dovrebbe apparire in blu) e continuate ad aggiungere righe di dialogo.
    Quando volete che la conversazione finisca, aggiungete una riga di dialogo del PG vuota. Apparirà un [fine dialogo].
    Notate che se aggiungete una risposta del PNG al [fine dialogo], quest'ultimo si trasformerà in [continua], facendo in modo che il PNG continui il suo discorso senza causare una finestra di dialogo troppo lunga (e troppo stancante) da leggere.

    Adesso, come fare per fare in modo che il PG abbia più frasi da dire che devono essere selezionate dal giocatore?
    Basta che aggiungiate frasi per PG alla frase precedente del PNG.
    Poi continuate ad aggiungere dialogo, sia in una risposta che in un'altra.
    Se guardate bene, avete creato una diramazione da una frase del PNG da cui derivano frasi del PG.
    Ogni riga di dialogo si chiama "nodo". Certo, anche una sola risposta del PG causava la creazione di un nodo, ma ora il concetto è più ovvio, no?

    Come fare per fare più o meno la stessa cosa, ma ad un PNG? Ovvero, se ilPNG chiede di fare una cosa e il PG la fa, come bisogna procedere per fare in modo che il PNG non dica le stesse cose?
    Iniziate a scrivere come per le risposte del PG, ma stavolta le create alla radice o ad una risposta del PG. Ora è da quel nodo che parte una diramazione con le risposte del PNG.
    Ora vi starete chiedendo: "e come fa il PNG a sapere quello che deve dire in quel momento?"
    Lì ci vogliono gli script, nella sezione "Il testo appare quando.". Ma in che modo?
    Qui apriamo una postilla su come funziona il core Aurora nella lettura delle conversazioni.

    Aurora legge le conversazioni dall'alto verso il basso.
    Questo non comporta niente per le risposte del PG, ma così il PNG dirà la prima frase che compare in alto.
    In linguaggio più tecnico, Aurora riporterà il primo che gli riporta "vero" (return TRUE).
    Se quella riga di dialogo gli riporta "falso" (return FALSE) passa a quello di sotto, e così via.
    Quindi le risposte multiple di un PNG vanno ordinate, in ordine cronologico, dal basso verso l'alto.
    Mentre la frase più bassa (quella di benvenuto) deve essere senza script "restrittivi", tutti gli altri ne devono avere.
    Uno script "restrittivo" richiama una variabile (int ...) e la condizione "se -blah blah blah- allora return TRUE, else return FALSE"

    Facciamo un esempio: se un PNG ci chiede di dare 3 pugni ad un manichino e,
    una volta fatto, ci darà una spada, il dialogo dovrebbe apparire così:

    Radice
    |
    |------ 1- [possessore] Sei forte! Prendi questa spada.
    |------ 2- [possessore] Che aspetti? Picchia quel manichino!
    |------ 3- [possessore] Ciao! Ti va di dare 2 pugni al manichino?
    |------- 3.1- [pg] Ok, guarda come lo stendo!


    Quindi, nel nodo 3 (o meglio in 3.1) metterete uno script in "azioni compiute" che assegna una variabile per il fatto che avete parlato col PNG.
    (ad esempio "parlatoprimavolta")
    Nel nodo 2 metterete in "Il testo appare quando" una richiesta della variabile "parlatoprimavolta" (non tremate, potete usare lo Script Wizard!)
    Nel nodo 1. beh, questo è scripting, e quindi vi rimando agli innumerevoli tutorial che ci sono sulla rete, oltre che alle sane domande sul newsgroup.
    L'importante, però, è che abbiate capito come Aurora legge le conversazioni.

    3.3.b) Token e Action

    Anche in una conversazione ci possono essere delle componenti variabili.
    Quando un PNG saluta un PG, deve sapere se dare il buongiorno o la buonanotte, se il PG è maschio o femmina, elfo o gnomo, mago o bardo, a quale divinità crede, e così via.
    Invece di creare 3000 nodi con 3000 script, potete usare i Token, una specie di segnale che lascia decidere Aurora che parola utilizzare.

    Per inserire un token, potete:
    1- cliccare sulla [A] a destra del riquadro Testo e sceglierne uno tra gli elencati, lasciandosi guidare anche dagli esempi.
    2- una volta imparati i token a disposizione, scriverli direttamente (sono tutti inclusi in <>).

    Quindi, se scriverete una frase del tipo:

    Radice
    |-------[possessore] , lascia che guidi il tuo cammino

    a seconda che il PG sia maschio o femmina, al posto di sarà sostituito "Fratello" o "Sorella".

    Possono essere tranquillamente usati più token insieme, come nell'esempio:

    Radice
    |------ [possessore] Tu devi essere <firstname>. <fullname>, giusto?

    Allora, se il PG si chiamasse Kalisto Borinson, la frase sarebbe:
    "Tu devi essere Kalisto. Kalisto Borinson, giusto?"

    Sicuramente avrete notato, tra i Token, quattro cose che non sono propriamente tokens: <startcheck>, <startaction>, <starthighlight> e .
    Questi servono solo per colorare, rispettivamente con rosso, verde e blu, parte della conversazione inclusa tra uno dei tre "token" e .
    E, secondo la convenzione Bioware, dovrebbero essere usati così:

    • StartCheck per segnalare una prova in qualche abilità o simili, ad

    esempio:

    Radice
    |------ [possessore] No, non ti voglio dare quell'anello!
    |
    |--------- <startcheck>[persuadere] Ma che valore ha per te?
    |
    |--------- <startcheck>[minacciare] Dammelo o ti spiezzo in due!

    Naturalmente è solo un colore.
    Per fare veramente prove di abilità, di punteggio e/o alterazioni all'allineamento, ci vuole la potenza degli script.


    • StartAction per descrivere un'azione che sta avvenendo.

    Radice
    |------ [possessore] Woof, bau! <startaction>Il cane ti lecca la mano


    3.4) Il Diario
    Nel diario sono elencate sia le varie missioni da compiere, principali e secondarie, che le missioni compiute.
    Si possono ordinare per nome, per data o per priorità. I
    noltre è possibile scrivere note personali, cosa che si può rivelare molto utile quando si gioca sessioni in multiplayer a distanza di tempo l'una dall'altra.

    3.4.a) Come creare un diario delle quest
    Andate su Strumenti --> Creazione Diario (o premete CTRL+ALT+J).
    Proprio come nelle conversazioni, cliccate su Aggiungi per creare delle "categorie".
    In ogni categoria potete modificare:

    - il nome, che sarebbe il titolo di ogni quest
    - il tag, che in alcuni script è importante
    - la priorità, per soddisfare i giocatori che ordinano così il diario
    - i PE (Punti Esperienza, PX, XP o come volete chiamarli) dichiarati *
    - il commento *

    *ATTENZIONE - queste due voci servono solo per dare una guida a chi apre il vostro modulo con il toolset.
    Assegnare un valore ai PE non darà più esperienza al giocatore, perché la sua funzione è solo dichiarativa.
    L'esperienza deve essere data al PG attraverso gli scripts.

    Adesso selezionate una categoria e cliccate su Aggiungi per creare i "nodi".
    In ogni nodo potete modificare il testo e il numero identificativo o ID (segnatevelo questo!).
    L'opzione "Completa categoria" va attivata al nodo che termina la missione.
    Sarebbe ciò che causa nel gioco il motivetto di fine missione.

    3.4.b) Come collegare un evento del diario ad una conversazione
    Andate all'editor delle conversazioni e cliccate sul nodo dove volete che ci sia un evento del diario.
    Cliccate sulla scheda "Altre azioni" e nel campo Diario selezionate la categoria e l'ID del nodo del diario.
    Questa è la soluzione più semplice. Se volete collegare un evento del diario ad altro dovete usare gli script.
    La funzione è AddJournalQuestEntry.
    buona fortuna :-]
    4) Tipi di file modificabili in NWN
    I file che usa NWN comprendono tabelle di dati, hakpacks, moduli, suoni, ritratti, personaggi, filmati, colonne sonore e raccolte di istanze.
    In realtà ce ne sono anche altri, ma o non sono facilmente modificabili, come il database esterno (.dbf) o è meglio non modificarli, come il dialog.tlk.

    4.1)Estensioni
    - Modulo = .mod
    - Modulo della campagna ufficiale = .nwm *
    - Hakpack = .hak
    - Raccolte ufficiali Bioware = .bif
    - Ritratti = .tga (Targa Bitmap NON compresso)
    - Colonne sonore = .bmu
    - Filmati = .bik
    - Personaggi = .bic
    - Raccolte di istanze = .erf (approfondimento nel punto 4.1.a)

    * Questi moduli possono essere aperti solo in "sola lettura", e comunque non
    prima di averli completati nel gioco.

    Files con queste estensioni, di solito, li troverete in un hakpack o nei
    files .bif:
    - Textures = .tga
    - Textures "dinamiche" (possono cambiare colore) =.plt
    - Textures DirectDraw Surface = .dss
    - Suoni = .ssf
    - Modelli =.mdl (ascii e binari)
    - Tabelle di dati = .2da (approfondimento nel punto 4.1.b)
    - dichiarazione di tile= .itp (modificabile tramite tool apposito)

    - altre estensioni che difficilmente sono utili modificandoli (se si possono modificare).

    4.1.a) ERF
    Questo file racchiude varie istanze che possono essere esportate in unmodulo.

    Può contenere progetti di:
    - Aree (.are)
    - Scripts (.nss)
    - Conversazioni (.dlg)
    - Creature (.utc)
    - Porte (.utd)
    - Incontri (.ute)
    - Oggetti (.uti)
    - Oggetti posizionabili (.utp)
    - Suoni (.uts)
    - Mercanti e negozi (.utm)
    - Attivatori (.utt)
    - Tappe (.utw)
    - Modelli di trama (.ptt)

    Da come dovreste aver capito, un file .erf è una sorta di pacchetto in cui ci possono essere i files suddetti.

    Per esportare istanze in un file .erf:
    1) Cliccate su File à Esporta.
    2) Cliccate su "Aggiungi Risorse"
    3) Selezionate il tipo di risorsa, dopodiché i vari progetti.
    4) Ripetete dal punto 2 se volete aggiungere altro, oppure ciccate su OK per continuare
    5) Scegliete un nome per il vostro file .erf e cliccate su OK.
    6) Se volete, aggiungete un commento, altrimenti cliccate subito su OK.

    Per importare istanze da un file .erf:
    1) Cliccate su File à Importa.
    2) Scegliete il file .erf e cliccate su OK.
    3) Se esce una finestra di commenti, leggeteli e cliccate su OK.


    Potrebbe anche uscire una finestra che dice "risorse mancanti". Succede quando una istanza fa riferimento ad un'altra che non è inclusa nel pacchetto, ma non è presente nemmeno nel modulo.
    Può essere che nei files scaricati ci sia più di un erf, allora cliccate su OK per continuare l'importazione. Altrimenti significa che l'esportatore è stato maldestro.

    4.1.b) 2DA
    Questi files (2-Dimensional Array) sono delle "semplici" tabelle che contengono le informazioni più importanti.
    Per esempio, nel file weapons.2da ci sono i danni base, come un'arma va impugnata, a che classe appartiene, ecc.
    Poi negli altri 2da ci sono magie, effetti visivi, ritratti dei PNG, e tantissime altre cose.
    Non è semplice, ma se ci riuscirete a modificarli bene, potrete creare nuove magie, nuove classi di armi (niente più tridenti
    che in realtà sono lance!!!), e fare tantissime svariate cose.
    Per la loro modifica, vi rimando alle guide presenti in rete.
    Una buona guida è il "Custom Content Tutorial" di Eligio Sacateca.

    4.2) HakPack
    Un hakpack contiene i Custom Contents (vedi 3.2.r).
    Tecnicamente, ha la stessa funzionalità della cartella Override, con la differenza che un hakpack ha influenza solo sui moduli associati ad esso, evitando la maggior parte dei conflitti e dei problemi vari, se i custom contents non sono fatti a regola d'arte.

    4.2.a) Come si inserisce un hakpack in un modulo
    Andate su Modifica --> Proprietà del modulo.
    Scegliete la scheda "contenuto personalizzato" (dalla versione 1.29 in poi).
    Sotto il riquadro bianco grande, scegliete un hakpack e cliccate su Aggiungi. Potete anche aggiungerne altri.
    L'opzione "sposta in alto" e "sposta in basso" servono per stabilire la priorità: quando si usano più hakpack, se è presente lo stesso file, viene utilizzato quello dell'hak posto più in alto. Nei files .2da è un problema, in quanto alcuni hakpacks potrebbero non funzionare correttamente.
    E'necessario, in questi casi, "fondere" gli haks in uno solo (o crearne uno solo per i .2da)

    4.2.b) Come si crea un HakPack
    Bioware ha messo a disposizione l'Hak Pak Editor.(C:\Neverwinternights\NWN\utils\nwhak.exe)
    Cliccate su Resource --> Add e aggiungete i files che volete.
    Una volta fatto questo, salvatelo andando su File --> Save (o Save As.)

    4.2.c) Come si aggiorna un HakPack
    Per aggiornare il contenuto di un hakpack è sufficente importare nuovamente la risorsa desiderata all'interno del HP avendo cura che anche il file .2da che la prende in considerazione sia aggiornato con i nuovi riferimenti.


    4.2.d) Strumenti utili

    --------------------------

    4.3) Filmati
    La ciliegina sulla torta. anzi, sul modulo! Un filmato in codifica BinkVideo (.bik) può valorizzare notevolmente il vostro modulo. sempre se sia
    bello e non pesante da scaricare ;-)

    4.3.a) Come si crea e converte un filmato per NWN


    4.3.b) Strumenti utili

    5) Cosa è l'aurora scripting
    Lo scripting è l'anima di un modulo.
    Dirige tutte le azioni dei PNG (e buona parte di quelle dei PG), così come svariati avvenimenti, da semplici tiri di dado o aperture di porte alla sovversione delle regole di D&D, dai passaggi da un'area all'altra allo sputare frasi di un PNG mentre combatte, dall' aggiungere eventi del diario al terminare il modulo.
    Uno script è solo una sequenza di righe che descrive logicamente avvenimenti e condizioni, secondo una struttura del tipo [succede 1, 2 e 3] oppure [se succede 1, allora succede 2, altrimenti avviene 3], o tante altre, dalle più semplici alle più complesse.
    Per diventare scripters non servono tools particolari o capacità innate, né una grande intelligenza, a differenza delle credenze popolari che hanno reso lo scripting l'incubo dei novizi: tutto quello che serve è:
    • sapere la sintassi corretta
    (se programmate in C avete già vinto metà battaglia, ma non è difficile impararla)
    • conoscere alcune funzioni
    (consigliato disporre del Lexicon che potete trovare qui www.reapers.org/nwn/reference/)
    • rendere il vostro pensiero razionale e logico
    (giusto quel poco che serve per compilare uno script)
    • un po' di pazienza
    (nel caso il compilatore vi riportasse continuamente errori)

    I programmatori Bioware hanno già provveduto a semplificarvi il linguaggio degli script: basterà solo richiamare qualche funzione per crearne correttamente molti.
    Inoltre, per buona parte di questi, potrete usare lo Script Wizard, sia quello ufficiale che quello "esteso" di Lilac Soul (http://lilacsoul.revility.com/).
    E, soprattutto, se, oltre a seguire i tutorials, giocate ai moduli con lo spirito del tipo {vedo un avvenimento, mi chiedo "Come ha fatto?", lo apro con il toolset, vedo gli script e apprendo}
    (consigliati i moduli italiani che non hanno script stracomplicati), vi troverete nel giro di pochi mesi quasi maestri nello scripting!

    5.1) Eventi
    Spesso è necessario definire cosa deve succedere in un determinato momento, ad esempio quando il PG riposa, quando il posizionabile viene distrutto, ecc.
    Invece di impazzire con script da 10000 "if", Bioware ha messo a disposizione gli Eventi, ossia "cosa succede quando.". Potete lasciare gli script di default, o metterne di vostri.
    Ricordiamo che quando si parla di "creatura", "oggetto", "un PG", "una magia" "qualcuno" et similia, questi sono tutti da definire, anche con condizioni "if".

    5.1.a) Eventi del modulo
    Questi eventi si riferiscono al modulo intero. I suoi eventi, quindi, comportano per la maggior parte modifiche "globali".

    Andate su Modifica --> Proprietà del modulo e selezionate la scheda Eventi.

    Gli Eventi a disposizione sono:

    - OnAcquireItem
    Quando un personaggio raccoglie uno o più oggetti

    - OnActivateItem
    Serve per definire il funzionamento delle proprietà speciali di determinati oggetti (il "potere unico" della Pietra del Richiamo ad esempio).

    - OnClientEnter
    Nei server, quando un PG entra nella partita. Nel gioco singolo, quando comincia il gioco.

    - OnClientLeave
    Nei server, quando un PG esce dalla partita.

    - Salta scene animate attivate
    Quando un PG decide di saltare le scene animate (cutscenes) e, soprattutto, è da definire se lo può fare.

    - OnHeartbeat
    Quello che succede continuamente ogni turno di gioco (ogni 6 secondi)

    - OnModuleLoad
    Permette il caricamento di funzioni e variabili globali utili nel resto del modulo

    - OnPlayerDeath
    Quando un PG muore

    - OnPlayerDying
    Mentre un PG sta morendo

    - OnPlayerLevelUp
    Quando un PG sale di livello

    - OnPlayerRespawn
    Quando un PG resuscita

    - OnPlayerRest
    Quando un PG riposa (o vuole riposare)

    - OnUnacquireItem
    Come in OnAcquireItem, ma quando l'oggetto viene lasciato a terra.

    - OnUserDefined
    Evento personalizzabile (vedi punto 5.1.f)

    5.1.b) Eventi dell'area
    Gli script che piazzate in questi eventi si riferiscono alla sola area.

    Selezionate un'area, poi andate su Modifica --> Proprietà dell'area e

    selezionate la scheda Eventi. Troverete questi eventi:

    - OnEnter
    Quando si entra nell'area

    - OnExit
    Quando si esce dall'area

    - OnHeartbeat
    Quello che succede continuamente ogni turno di gioco (ogni 6 secondi)

    - OnUserDefined
    Evento personalizzabile (vedi punto 5.1.f)

    5.1.c) Eventi della creatura
    Questi script si riferiscono ad una creatura.

    Scegliete una creatura e andate su Modifica. Selezionate la scheda Script.

    Gli Eventi sono:

    - OnBlocked
    Quando il percorso della creatura è bloccato (da porte, altri PNG, ecc.)

    - OnCombatRoundEnd
    Quello che succede ogni round di combattimento (come in OnHeartbeat, ma mentre combatte)

    - OnConversation
    Quando la creatura inizia (o finisce) una conversazione

    - OnDamaged
    Quando la creatura subisce un danno

    - OnDeath
    Quando la creatura muore

    - OnDisturbed
    Si usa se la creatura viene interrotta mentre sta eseguendo una altra azionne

    - OnHeartbeat
    Quello che succede continuamente ogni turno di gioco (ogni 6 secondi)

    - OnPerception
    Quando la creatura vede qualcuno

    - OnPhysicalAttacked
    Quando la creatura viene attaccata.

    - OnRested
    Quando la creatura ha riposato

    - OnSpawn
    Quando la creatura compare nel gioco

    - OnSpellCastAt
    Quando alla creatura viene lanciata addosso una magia

    - OnUserDefined
    Evento personalizzabile (vedi punto 5.1.f)

    5.1.d) Eventi dei posizionabili
    Gli script in questi eventi si riferiscono ad un posizionabile.

    Scegliete un posizionabile e andate su Modifica. Selezionate la schedaScript.

    Questi sono gli Eventi:

    - OnClose
    Se il posizionabile ha inventario, quello che succede quando questo viene chiuso (si esce dal suo inventario)

    - OnDamaged
    Quando il posizionabile subisce un danno

    - OnDeath
    Quando il posizionabile viene distrutto.

    - OnHeartbeat
    Quello che succede continuamente ogni turno di gioco (ogni 6 secondi)

    - OnDisturbed
    Si attiva quando viene aggiunto o levato qualcosa dal suo inventario (se l'oggetto è dotato di inventario)

    - OnLock
    Quando il posizionabile, con inventario e/o serratura, viene serrato.

    - OnPhysicalAttacked
    Quando il posizionabile viene attaccato

    - OnOpen
    Se il posizionabile ha inventario e viene aperto si attiva lo script immagazzinanto nell'onopen.

    - OnSpellCastAt
    Quando viene lanciata una magia sul posizionabile.

    - OnUnlock
    Quando la sua serratura viene scassinata

    - OnUsed
    Quando il posizionabile viene usato (cioè cliccandoci sopra)

    - OnUserDefined
    Evento personalizzabile (vedi punto 5.1.f)

    5.1.e) Eventi degli attivatori
    Questi script si riferiscono ad un attivatore (ricordiamo che a questa categoria appartengono anche le trappole.

    Scegliete un attivatore e cliccate su Modifica.
    Selezionate la scheda Script. Gli Eventi sono:

    - OnClick
    Quando si clicca sull'attivatore (se è selezionabile)

    - OnEnter
    Quando una creatura entra nell'area delimitata dall'attivatore

    - OnExit
    Quando la creatura esce dall'area delimitata dall'attivatore

    - OnHeartbeat
    Quello che succede continuamente ogni round di gioco (ogni 6 secondi)

    - OnUserDefined
    Evento personalizzabile (vedi punto 5.1.f)


    5.1.f) Evento custom: OnUserDefined

    Con OnUserDefined si possono definire degli eventi con un codice personalizzato.
    Essi vanno gestiti tutti in OnUserDefined, in un mega IF molto simile a quello degli script di spawn.
    Dovrebbe esserci un valore base per gestire gli eventi user defined al quale si possono aggiungere numeri progressivi per ogni evento non standard che si sta definendo.
    Di solito si usano per oggetti specifici o per fare il trigger su qualche operazione non standard (con questa funzione si possono implementare skill check e skill system alternativi).

    Esempio di OnUserDefined:

    void main()
    {
    int nUser = GetUserDefinedEventNumber();

    if(nUser == 1001) //HEARTBEAT
    {

    }
    else if(nUser == 1002) // PERCEIVE
    {

    }
    else if(nUser == 1003) // END OF COMBAT
    {

    }
    else if(nUser == 1004) // ON DIALOGUE
    {

    }
    else if(nUser == 1005) // ATTACKED
    {

    }
    else if(nUser == 1006) // DAMAGED
    {

    }
    else if(nUser == 1007) // DEATH
    {

    }
    else if(nUser == 1008) // DISTURBED
    {

    }
    }

    Questi sono i primi eventi user-definibili "standard" che NWN supporta anche tramite apposite macro EVENT_HEARTBEAT, EVENT_DISTURBED e così via.

    Si possono definire anche altri eventi dopo 1008...

    Per creare un evento custom e segnalarlo al modulo:

    object oNPC;
    event eSpecialEvent;

    eSpecialEvent = EventUserDefined(1234);
    SignalEvent(oNPC,eSpecialEvent);

    Prima lo si deve creare con EventUserDefined e poi lo si deve segnalare con SignalEvent.
    ovviamente per gestirlo si deve aggiungere un

    else if (nUser == 1234) {
    //codice per la gestione
    }

    Piuttosto che usare i numeri un buon metodo è creare un file da includere che contenga le dichiarazioni di tante variabili costanti quanti sono gli eventi custom, così non sarà necessario ricordarli per numero tipo

    const int EVENTO_ARTEFATTO 1010
    const int EVENTO_MORTE 1011

    e poi si include il file nell'onUserDefined che si usa (ce ne sono anche per le singole creature).
    Non abusatene troppo però, molti eventi si riescono a gestire con quelli standard tranquillamente.
    Beho
    07 May 2004, 23:57
    5.2) Errori comuni di compilazione
    Questa sezione è ispirata alla sezione "Common Errors" del tutorial di
    Robert Straughan che potete trovare sul Lexicon qui:

    Home --> Lyceum --> Tutorial --> Writing a Module --> Robert Straughan --> Capture Glory: Miscellaneous/Reference


    Di solito, gli errori più comuni sono dovuti per distrazione (mancanza di punto e virgola, parentesi graffe, mancata dichiarazione di variabile) o per ignoranza (sintassi).
    Il compilatore, indicandovi la riga e comunicandovi messaggi, vi aiuta molto in questo: basta saperlo interpretare.

    Qui sotto sono elencati alcuni dei messaggi del compilatore riguardante gli errori più frequenti. Ricordate però che, se per il 97% si riferiscono ad un errore facilmente risolvibile, per il 3% potrebbero riferirsi anche ad errori "seri".

    • Analisi lista variabili
    (Parsing variable list)
    • Assenza del punto e virgola dopo l'espressione

    Se incontrate uno dei due messaggi sopra, probabilmente avete dimenticato il punto e virgola alla fine di una linea.

    • La condizione "if" non può essere seguita da un'istruzione null
    ("if" cannot be followed by null statement)

    Si è creata una dichiarazione del tipo "se succede.." interrompendosi lì.
    Controllate la riga che inizia con "if": avrete sicuramente messo un punto e virgola alla fine di quella riga (se c'è, toglietecelo)

    • Variabile definita senza il tipo
    (Variable defined without type)

    La traduzione in italiano è errata: dovrebbe essere "variabile definita senza dichiarazione".
    Avete usato una variabile nel vostro script, ma molto probabilmente avete dimenticato di dichiararla in precedenza.

    • Stato sconosciuto nel compilatore
    • Tipo di dichiarazione non valida
    • Istruzione "else" senza "if"
    • Istruzione composta di fine inaspettata
    • Stato di variabile errato presente nello stack

    Se vi appare uno di questi messaggi significa: o è un errore serio o avete dimenticato qualche parentesi graffa (nel primo messaggio potreste anche aver fatto errori di sintassi, nell'ultimo messaggio potreste aver dimenticato di racchiudere una dichiarazione tra le parentesi graffe)

    • Tipi non corrispondenti
    • L'operazione aritmetica ha degli operandi non validi
    (Arithmetic operation has invalid operands)

    Se state facendo operazioni aritmetiche, probabilmente avete usato operandi diversi tra loro, come ad esempio numeri integrali (int) + numeri razionali (float), oppure Float con una riga di lettere (string).

    • L'operazione logica ha degli operandi non validi

    Più o meno è la situazione di sopra. se state facendo operazioni logiche.

    • Salto della dichiarazione con istruzione "case" non consentito
    (Skipping declaration via "case" statement disallowed)

    Se state usando le istruzioni switch/case, non potete dichiarare variabili lì dentro: dovete dichiararle fuori!

    Questi sono le soluzioni per gli errori più comuni. Ma ricordate che a volte uno dei messaggi sopraelencati (o un terribile "assenza della parentesi") può capitare anche per aver mancato un #include o simili.
    Curate la sintassi prima.

    -EOF-

    Edited by Tukaram - 8/12/2015, 06:19
  11. .
    Apri il fil mdl con world e modifica i richiami al plt. Poi salva ovviamente nello stesso formato o perdi l'estensione ;)

    Ps. ho editato, ho ricordato che le plt sono anche textures, nello specifico le textures che possono avere modificati i colori.

    Edited by Tukaram - 6/12/2015, 18:24
  12. .
    Riprendo il discorso, ho provato, ma mettendo in onenter dell'attivatore, in quanto in onexit per com'è strutturata l'area non andrebbe bene. Ho provato, ma non funziona. Il png resta fermo e non va ad aprire la conv col pg. Il motivo è perchè uso l'evento onenter invece che onexit? io come scrissi, nello script metto il tag del png e il nome della conversazione. Nell'attivatore invece la variabile tagpng-string-TAG DEL PNG.

    edit. Ho modificato GetExitingObject con GetEnteringObject, ma lo stesso non funziona. Oltretutto, se devo segnare il tag della conv sullo script, lo stesso devo fare uno script per ogni conv...o sbaglio? Non è che sull'attivatore oltre alla variabile con il tag del png ci va anche quella con il tag della conversazione?
  13. .
    No, non partecipa ;) anche perchè non sa parlare... :02:
  14. .
    CODICE
    void main()
    {
    object oNpg=GetObjectByTag("TAGNPG");
    object oLocation = GetWaypointByTag("TAGTAPPA");
    if(GetIsFriend(oNpg))
    {
    AssignCommand(oNpg, JumpToObject(oLocation));
    }
    }
  15. .
    :01: io mi ricordo di quando mi facesti lanciare il server dalla lan. Peccato che non eravamo tanti, ma il gioco (parlo del primo) meritava assai!!
3403 replies since 27/5/2007
.