Bien, comme promis, je vais faire un petit recapitulatif de ce que je pense avoir compris des factions ets des reputations.
Attention, ce que j'en sait fonctionne pour moi, mais il demeure encore quelleques zone d'ombre.
Tout d'abords, commencont par quelques definitions :
Reputation
La facon que le autres objets (vivi, pas que les creature ^^) du jeu ont de reagir a votre presence et a vos action.
Faction
Groupe Unique qui est constitué de plusieurs objets (créatures et autres). Les reactions entre les factions sont gérées directement a partir de leur Repuation. Chaque faction peut reagir d'un facon differentes aux autres factions, et qui plus est, une relation entre 2 faction peut tres bien etre du type "je t'aime, moin non plus!")...
Standart Faction
C'est exactement pareil que les factions dont je viens de parler, mais en mieux, pasque ELLES, elles ont droit a un SetReputation (!! C'est po juste !)
Il y en a 5 de base :
- STANDARD_FACTION_COMMONER
- STANDARD_FACTION_DEFENDER
- STANDARD_FACTION_HOSTILE
- STANDARD_FACTION_MERCHANT
et la faction PC, qui en fait est une multi-faction, c'est pourquoi on ne peut la choisir en variable constantes.
Personnal Reputation
Voila une notion tres interessante, que l'on oublie regulierement lorsque l'on gère les factions. En fait, chaque créature est spawnée avec des reputations differentes pour chaque faction existante. La personnal reputation, c'est une reputation directe entre deux objets. Elle est plus forte que la Reputation InterFaction. En fait, c'est une adaptation de la reputation Interfaction. On peut même considerer que ingame que apres le spawn, OBJECT_SELF va acquerir une personnal Reputation de tout les objets du jeu, et ne plus traiter les factions (mais c'est FAUX , et on le verra plus loin).
Les fonctions de reputation
Tres important :
Elles sont assez bien fournit et permettent toutes sortes d'action sur les factions et les objets.(meme si il en manque une : SetFactionReputation...)
AdjustFactionReputation(object1, object2, int) :
Permet d'ajuster la reputation de comment 2 va voir 1.
Necessite #include "nw_i0_plot"
AdjustReputation(object1, object2, int) :
C'est exactement pareil, mais sans le Include... (allez comprendre oO!)
ChangeFaction(object1, object2) :
Permet d'inclure la creature de la faction1 pour le mettre dans la faction2
ChangeToStandardFaction(object, int) :
La meme chose, mais seulement avec l'une des 4 faction de base non-PC.
ClearPersonalReputation(object, object) :
Tres pratique ^^ : permet de reinitialiser une Repuation personnelle pour qu'elle colle a la Reputation de la faction.
GetFactionAverageReputation(object1, object2):
Focntionne en couple avec le Adjust... Cela permet de savoir comment objet 1 voit Objet 2. Cela va permettre, dans un script, de faire le Set. (voire plus loin...)
GetFactionEqual(object1, object2) :
Fonction de simplification qui permet de verifier si l'objet 1 qui approche est de la meme faction que l'objet 2.
GetIsEnemy(object1, object2)
Je pense que cela se passe de commentaire ^^
GetIsFriend(object1, object2)
...
GetIsNeutral(object, object)
Dans les 3 fonctions ci dessus, considerez objet2 comme etant OBJECT_SELF.
GetIsReactionTypeFriendly(object, object)
Un peu comme GetIsFriend. Ca permet entre autre de faire des script de non aggression... (boff boff...)
GetIsReactionTypeHostile(object, object)
pareil...
GetIsReactionTypeNeutral(object, object)
pareil...
GetReactionAdjustment(object)
Cette faction a un nom qui annonce beaucoup, mais en fait, ne sert que pour l'ajustement du prix d'un magasin en fonctionde la reputation(ie : alignement, et non reputation...oO) du PC. Interessant quand même...
GetReputation(object1, object2)
La reptation personnelle de objet 1 envers objet2
GetStandardFactionReputation(int, object)
Comme pour le GetAverageFactionRep, mais la, on a directement la reputation de la faction de objet envers la faction standart entrée.
SetIsEnemy(object)
Cela va en fait ajuster automatiquement la reputation de objet envers le declencheur du script a -100, et donc Hostile. cela va aussi declencher l'attaque.
SetIsTemporaryEnemy(object, object, int, float) :
La meme chose, mais parametrable, puisque l'on peut gerer une inimité temporaire. (ou une inimité entre 2 objet sans OBJECT_SELF dedans).
SetIsTemporaryFriend(object, object, int, float) :
Pareil...
SetIsTemporaryNeutral(object, object, int, float) :
...
SetPCDislike(object1, object2)
Je ne connais pas encore bien l'effet du dislike. si vous aviez plus d'info.
SetStandardFactionReputation(int1, int2, object) :
Permet de directement ajuster la faction int1 de l'objet au montant égal à int2. Cette fonction permet une gestion simple des alterations de reputation, puisque les ajustments de reputations suivants les actions effectués ne sont pas tous les mêmes, tandis que le Set lui va pouvoir definir un nombre controlé et maitrisé. (mais je m'égare...)
Pour finir :
A noter que lorsque l'on tue un monstre, la reputation de la faction diminue un peu (entre -2 et -5), mais que la perception de l'attaque par les membres alentours modifie a tous leur reputation personnelle. (d'ou les changement entre area... ~_^)
Pour ceux que ca interresse de faire un SetReputation pour des faction non-standart, je propose ceci :
//int nAdjust = ce que vous voulez Set.
AdjustReputation(objet1,objet2, nAdjust - GetFactionAverageReputation(objet1,objet2));
voila... en esperant que ca aide.
Je repondrait a toutes les questions dont j'ai les reponses...