changer l'alignement d'un pj

Répondre
Partager Rechercher
je voudrais changer l'alignement de pj via script cad tu parle a un docteur par exemle et en, echange de po (10000) il te chnager l'alignemnt vers bon mauvais ou neutre, loyal, neutre ou chaotiqur.

Quelqu'un a la solution??
bon comme je debute en srcipt il faudrai que tu m'explique un peu plus moi je fais ca je sais pa si c('est juste


void main()
{

// Adjust the alignment of oSubject.
AdjustAlignment(object oSubject, int nAlignment, int nShift);

AdjustAlignment(object oSubject, int nAlignment, int nShift);

// Prendre de l’or au joueur
TakeGoldFromCreature(10000, GetPCSpeaker(), TRUE)
}

je remplace object par l'alignement desiré et les int??? je pense par le nombre que ca rajoute. dis moi si je me trompe ou sinon qu'elqu'un peut m'apprendre a scripter (je ne connait rien en programmation ni en c)
Ton code ne peu pas marcher pour plusieurs raison (met les balise aussi sa aide)


Code PHP:

// Adjust the alignment of oSubject.
AdjustAlignment(object oSubjectint nAlignmentint nShift);

AdjustAlignment(object oSubjectint nAlignmentint nShift); 
Non seulement tu l'ecrit 2 fois ce qui sert stricquetment a rien et en plus ou sont tes declarations

Qu'est ce que le oSubject ? le int nAlignment ? le intShift ?

et il y a un oublie de ";" a la fin de ton TakeGold

Donc ton code devra avoir la forme suivante :
Code PHP:

void main()
{
    
//les declarations
    
object nSubject /*ici l'assignement*/;
    
int nAlignment /*ici l'assignement*/;
    
int nShift /*ici l'assignement*/;

    
//Puis tes fonctions (et conditions si y en a)
    
AdjustAlignment(oSubjectnAlignmentnShift);
    
TakeGoldFromCreature(10000GetPCSpeaker(), TRUE);


Voila avec sa tu devrais t'en sortir (fait gaffe y a rien de complet dans ce code c'est un genre de squelette )
allez vite fait ^^

commence par mettre ton code entouré des balise [ php ] [ /php ]
Ca rendre la code plus lisible, dans ce genre :
Code PHP:

void main()
{

// Adjust the alignment of oSubject.
   
AdjustAlignment(object oSubjectint nAlignmentint nShift);

   
AdjustAlignment(object oSubjectint nAlignmentint nShift);

   
// Prendre de l’or au joueur
   
TakeGoldFromCreature(10000GetPCSpeaker(), TRUE)

Ce que tu a copié dans ton code par :
AdjustAlignment(object oSubject, int nAlignment, int nShift);
ce n'est que la syntaxe de la fonction AdjustAlignment().
C'est juste pour declarer cette fonction pour qu'elle soit utilisable (pas besoin de comprendre ca pour ton script, contente toi de la suite)

En gros, la ou c'est marqué :
*object oSubject : tu dois mettre un objet a la place (object xxxxx signifie que la variable nommé xxxxx est un objet (cad une creature/une porte/un placeable/un item)).
*int nAlignment : pareil qu'au dessus, mais comme c'est un "int", ca veut dire qu'il faut mettre un entier (INTeger)
* int nShift : pareil que pour nAlignement.

Explication des variables :
*oSubject : ca ce sera l'objet qui sera sujette au changement d'alignement.(creature, car une porte/un placeable/un item n'ont pas d'alignement.)
*nAlignment : la valeur qui indique dans quel sens le changement d'alignement va se faire. Pour voir quel entier utiliser (via des constantes (ecrites en majuscules genre : ALIGNMENT_LAWFUL)) il faut lire la mini aide disponible dans l'editeur de script nw. Tu tapes AdjustAlignment, et tu double clique dessus, t'aura l'aide en dessous. Pour les traductions des alignement, un dico fera l'affaire ^^
*nShift : c'est la valeur de changement d'un alignement( dans le sens (nAlignment ) indiqué).

Un alignement est basé sur 2 chiffres allant de 0 a 100 chacun
*Une composante bon/mauvais : + la valeur est haute, plus le personnage est bon (donc tres mauvais : 0, tres bon : 100)
*Une composante loyal/chaotique : + la valeur est haute, plus le personnage est loyal (tres chaotique : 0, tres loyal : 100)

Pour ton code, sans gerer les dialogues pour choisir l'alignement, mais si le personnage a choisi Chaotique Bon alors :

Code PHP:

void main()
{
   
//On declare l'objet "personne" qui est en fait la personne parlant au PNJ "docteur"
   
object oPersonnage GetPCSpeaker();
   
// on ajuste l'alignement vers le BON d'une valeur de 30.
   
AdjustAlignment(oPersonnageALIGNMENT_GOOD30);

   
// on ajuste l'alignement vers le CHAOTIQUE d'une valeur de 30.
   
AdjustAlignment(oPersonnageALIGNMENT_CHAOTIC30);

   
// Prendre de l’or au joueur
   //Comme on a deja utilise la fonction GetPCSpeaker(), on ne la reutilise plus, mais on utilise l'objet oPersonnage qui
   //a la bonne valeur
   
TakeGoldFromCreature(10000oPersonnageTRUE)

Mais ce script ne fera pas forcement changer un personnage de mauvais vers bon ou vice versa, ca ne permet qu'une bonification de 30 (ce qui est deja bcp).
Si tu veux mettre a un alignement specifique utilise GetAlignmentGoodEvil() et GetAlignmentLawChaos().
Je n'explique pas la technique, je te conseille plutot d'apprendre les script par les tutoriaux proposé en persistant.
Ce sera mieux que de copier coller du code incomprehensible.
Et ca evite de voir les meme sujet, les auteurs des tutoriaux expliquent tres bien cela.
donc si j'ai a près compris :

object oSubject permet de parametrer si c'est une personne, un objet ou n'importe quoi.

donc pour le parametrer il faut mettre object oSubject = xxxx
ici GetPCSpeaker() parce que c'est un personnage sinon je met le tag.

au fait, pourquoi il il a deux parenthèse deriere getpcspeaker ???

avant de mettre la fonction ajustalignement qui se referre a object oSubject determiné avant, apres on determine si c'est plus ou moins cad avec good ou evil puis l'on choisi le nombre de point a ajouté ou a reitre cad 30 dans ton exemple (+ si avant good, - si evil)

et apres on refais la meme chose pour loyal ou chaotique.

puis on retire l'or désirer.

la j'ai juste une question :

pourquoi il faut mettre

TakeGoldFromCreature(10000, oPersonnage, TRUE plutot que TakeGoldFromCreature(10000, GetPCSpeaker(), TRUE ??

Si j'ai bien compris c'est la base pour faire des petit script dabord definir a qui ca s'adresse et ensuite mettre la fonction a executer en la paramettrant selon ce qu'on cherche.
Citation :
donc si j'ai a près compris :

object oSubject permet de paramettrer si c'est une personne, un objet ou n'importe quoi.

donc pour le parametrer il faut mettre object oSubject = xxxx
ici GetPCSpeaker() parce que c'est un personnage sinon je met le tag.
non, pas le tag. le tag est un string, alors que oSubject et GetPCSpeaker() donne des object. tu ne peut metre un object = string, il faut toujours que les deux cotés de ton égalité contiennent des variables de meme type (cad string = string, object=object, int = int, etc...)
Par contre il est possible par exemple, d'utiliser certaines fonction qui te transforment une variable d'un type vers un autre
Par exemple la fonction GetObjectByTag( "tag_dun_objet") va te donner l'objet qui correspond a ce tag
Il est possible dans ton exemple de mettre oSubject = GetObjectByTag("Porte") si tu veux que le sujet de l'action soit un placeable qui a le tag "Porte".
Il est absolument primordial de bien cerner les differents types de variables et de ne pas les melanger n'importe comment pour pouvoir scripter correctement


Citation :
au fait, pourquoi il il a deux parenthèse deriere getpcspeaker ???
parce que de la meme maniere que GetObjecByTag(), il s'agit d'une fonction.
Dans le cas de GetPCSpeaker(), c'est une fonction qui de donne une variable de type object, qui correspond au joueur en train de parler. Voila pourquoi on l'utilise ici.

Citation :
avant de mettre la fonction ajustalignement qui se referre a object oSubject determiné avant, apres on determine si c'est plus ou moins cad avec good ou evil puis l'on choisi le nombre de point a ajouté ou a reitre cad 30 dans ton exemple (+ si avant good, - si evil)
A propos de ce que j'ai mis en gras :
non ce n'est pas exactement ça. le deuxieme parametre designe quel element de l'alignement va etre affecté, cad soit la partie good/evil, soit la partie loyal/chaotique
Mais c'est le troisieme parametre qui va determiner le sens en fonction de sa valeur (vers good ou loyal avec un nombre positif, vers evil ou chaotic avec une valeur negative. )
Non ce n'est pas si compliqué que ca... la regle de base est de bien comprendre qu'on ne doit pas mélanger different types de variables... si tu declares une variable de type object, alors tu dois lui fournir un object, et pas autre chose.. c'est aussi simple que ca !
Maintenant si toi tu as seulement le tag de ton objet, mais pas l'objet lui meme, tu doit te debrouiller pour trouver une fonction qui te permet de retrouver l'objet grace au tag.

Par exemple, regardons ce machin incompréhensible qu'est la definition de la fonction GetObjectByTag() :
Code PHP:

object GetObjectByTag(string sTagint nNth=0
A priori, c'est du charabia... regardons-y de plus pres....
La premiere chose, avant meme le nom de la fonction : object
Cela signifie que la fonction GetObjectbyTag() nous retourne un objet... ou, si tu preferes, la fonction va effectuer un 'calcul', et nous sortira en resultat une variable de type object
Concretement cela veux dire que tu peux definir une variable object de la maniere suivante :
Code PHP:

 object oMachin 
La variable oMachin est une variable de type object.
Comme la fonction GetItemByTag() donne en resultat un object tu as tout a fait le droit d'écrire :
Code PHP:

 oMachin GetItemByTag("TagDunObjet"); 

par contre tu n'as pas le droit d'ecrire :
Code PHP:

 oMachin "TagDunObjet"
Pourquoi ?
Parce que "TagDunObjet" est du type string, autrement dit, c'est une chaine de caracteres (une suite de lettres) et non pas un objet. oMachin est un object, donc ne peut etre égal a un string...

Passons a la suite de la definition....

Viens le nom de la fonction elle meme, puis une parenthese.
Ce qui se trouve entre parenthese s'appelle les 'parametres' : ce sont les données que l'on donne a la fonction afin qu'elle nous calcule un resultat.

Voyons donc le premier parametre : string sTag

Ceci nous indique que la fonction demande une variable de type string afin de fonctionner... ca tombe bien, notre tag est de ce type la justement... (le 'sTag' qui suit est purement indicatif, mais permet de savoir justement que la fonction s'attend a recevoir le tag d'un objet en parametre...)

Donc résumons :
Voila une fonction qui, si on lui passe un string en parametre (le tag d'un objet) va nous permettre de retrouver l'object qui lui correspond...

Il existe encore plein d'autres types de variables utilisables, chacune utile dans certains cas de figures :
en voici une liste (non exhaustive, seulement les plus courants):
int (nombre entier)
float (nombre a virgule)
location (la position d'un objet)
object (un objet: un joueur, un placeable, un monstre, etc...)
effect (un effet graphique ou magique capable d'affecter une creature ou un joueur)
string (une chaine de caractere... autrement dit, une suite de lettres)
.....


L'important est de se rappeler que chaque type de variable a une utilisation precise, que l'on ne doit pas les melanger, et qu'il existe souvent des fonction qui permettent de 'traduire' un type de variable vers un autre type.


Voila, j'ai essayé d'etre le plus clair possible... mais faire clairement une difference entre les divers types de variables existant est imperatif pour arriver a faire quoi que ce soit en script (ou dans n'importe quel langage de programmation d'ailleur...)
Citation :
Provient du message de The_Hyena
hé bien dis moi c'est bien compliqué tout ca je suis carement a cote de la plaque.
C pour ca que y'a les tutoriaux pour y comprendre quelquechose
Plsu serieusement, Slay a deja debroussaillé pas mal avec ses explications.
Maintenant si tu ne comprends toujours pas, regarde les 1 ers posts tout en haut, y'a des liens pour apprendre les base de la programmation sous nwn.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés