Forum WTeam
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.

Forum WTeam

Le site des moddeurs 100% francophone.
 
AccueilPortailGalerieRechercherDernières imagesS'enregistrerConnexion
Le deal à ne pas rater :
Pokémon EV06 : où acheter le Bundle Lot 6 Boosters Mascarade ...
Voir le deal

 

 Modifier le comportement d'un PNJ ?

Aller en bas 
2 participants
AuteurMessage
Conan33
Moddeur
Moddeur
Conan33


Masculin Nombre de messages : 4
Age : 38
Date d'inscription : 28/01/2020

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 13:08

Bonjour tous le monde,


Voilà, je suis venu sur ce forum pour avoir des réponses à mes questions car j'ai posté mon problème à la Confrérie des Traducteurs et ils ne savent pas résoudre mon problème.
Voici mon problème :

Modifier le comportement d'un PNJ ? Scene111

Voici sur cette image que j'ai fait 2 scènes. Cette première scène sur l'image ci-dessus s'appelle "GSQ02Scene".
Dans cette scène, il y a 2 hommes que j'ai crée qui doivent avoir une discussion entre eux. Quand je test dans Skyrim, ça fonctionne ils sont face à face et ils parlent avec les dialogues perso que je leurs ai mis.

Voici l'image de la scène 2 :

Modifier le comportement d'un PNJ ? Scene212

Dans cette deuxième image, la scène numéro 2 s'appelle "GSQ02Scene2".

Le but de cette scène, c'est que les 2 mêmes perso qui discutaient se battent à mains nues.

Mon souci c'est que quand ils ont fini de parler à la scène 1, j'aimerai qu'ils se battent tout de suite après, or, dans le jeu, quand ils ont fini de parler, ils ne se battent pas et ils restent là à se regarder.

Dont voici ma question :

Peux-tu me dire comment faire pour que la scène GSQ02Scene2 se lisent automatiquement juste après la fin de GSQ02Scene stp ?

C'est à dire que quand l'un des 2 personnages dit sa dernière phrase, que les 2 perso se battent ensuite.

Me comprends-tu Mike ?

En espérant avoir une réponse, je te souhaite une bonne journée. Content

Cordialement.
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 14:19

Bonjour Conan,
Le fait que des pnj se battent ou discutent gentiment dépend de leur disposition l'un envers l'autre.
Cela dépend aussi de leur agressivité (agression).
Une autre variable est de savoir si en cas d'attaque l'agressé va se défendre ou fuir.
Cela permet de gérer plein de possibilités de comportement.
Lors de la création de tes personnages, je suppose que tu ne leur a pas donné de caractéristiques agressives, puisque au départ tu voulais qu'ils discutent, et non pas qu'ils s'attaquent à vue.

Voici les valeurs qui influencent la disposition d'un acteur par rapport à un autre, y compris le PC (la disposition est un calcul interne qui indique si deux acteurs s'apprécient plus ou moins)
... je mets la suite dans des posts différents...


Dernière édition par Mike89 le Lun 16 Mar 2020, 08:24, édité 2 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 14:27

Aggression (je donne le nom anglais, utile pour comprendre les fonctions et le CK et le code numérique)
En association avec les "Faction Relationships" (les relations entre factions), cela détermine si l'acteur va initier le combat :
Unaggressive (non agressif) 0 : ne commence pas le combat
Aggressive (agressif) 1 : attaque un ennemi dès qu'il le voit
Very Aggressive (très agressif) 2 : attaque les ennemis et les neutres à vue !
Frenzied (fou, psychopathe) 3 : attaque n'importe qui à vue (c'est rare, et c'est le résultat en général de sorts ou d'effets magiques).


Je te donne ces valeurs, car c'est important lors de la création d'un personnage. Normalement si je me souviens bien, lorsque l'on modifie cette variable, elle n'est pas sauvegardée. Donc lors du chargement, elle revient à celle qui était en cours avant sa modification...


Dernière édition par Mike89 le Jeu 27 Fév 2020, 16:44, édité 2 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 14:38

Relationship rank avec un autre acteur (niveau de relation)

4 Lover (époux ?)
3 Ally (allié, c'est à dire le plus souvent de la même famille, mais pas nécessairement)
2 Confidant (personne de confiance)
1 Friend (ami)
0 Acquaintance (simple connaissance)
-1 Rival (rival)
-2 Foe (adversaire)
-3 Enemy (ennemi)
-4 Archnemesis (ennemi juré)

par ailleurs 0, -1 et -2 sont dits neutres, ni amis ni ennemis et sont attaqués que par leurs ennemis très agressifs ou fous.


Dernière édition par Mike89 le Jeu 27 Fév 2020, 16:42, édité 3 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 14:51

Confidence (confiance en soi... ou lâcheté ?)
Cela détermine si l'acteur va accepter ou fuir une menace

Cowardly (couard) 0 : N'engage jamais le combat et s'enfuit en cas de menaces.
Cautious (prudent) 1 : Accepte ou fuit selon sa force et l'importance de la menace.
Moyenne 2 : Fuit s'il est surpassé.
Brave 3 Fuit s'il est très largement surpassé.
Foolhardy (téméraire) : 4 Ne fuit jamais devant qui que ce soit.

Je te donne ces valeurs, car c'est important lors de la création d'un personnage. Normalement si je me souviens bien, lorsque l'on modifie cette variable, elle n'est pas sauvegardée. Donc lors du chargement, elle revient à celle qui était en cours avant sa modification...


Dernière édition par Mike89 le Jeu 27 Fév 2020, 21:09, édité 3 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 15:04

Assistance (assistance...)

Indique si l'actor assiste ses amis et alliés qui sont en combat.

Helps Nobody 0 : n'aide personne
Helps Allies 1 : n'aide que les alliés
Helps Friends and Allies 2 : aide les amis et les alliés

Je te donne ces valeurs car c'est utile pour gérer les factions (et les bagarres générales, par exemple).


Dernière édition par Mike89 le Ven 27 Mar 2020, 10:20, édité 1 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 15:29

Comme tu le vois, la plupart de ces valeurs sont des caractéristiques de l'acteur lui même. Elles doivent être considérées comme stables, sauf exceptionnellement si une attitude ne doit durer que durant une session de jeu (les effets disparaissent à la recharge).
C'est la valeur du Relationship rank entre les deux acteurs qui va déterminer l'attitude de chacun par rapport à l'autre.
Il y a un niveau de relation de A par rapport à B, et un autre de B par rapport à A : A peut considérer B comme un simple connaissance, et B considérer A comme un ennemi. Cela peut donc déterminer qui va attaquer en premier. Ensuite, la disposition de A va évoluer automatiquement envers B, puisqu'il a été attaqué.
Sauf que même si B considère A comme ennemi, il n'attaque pas s'il a une agression de zéro !
De même si A considère B comme une simple connaissance (relation neutre), il va attaquer s'il a une aggression de niveau 2 (très agressif).
Il n'y aura jamais de combat si les deux PNJ ont une agression de 0 : aucun n'ose démarrer une action violente.
Pour qu'un combat soit possible, il faut donc que l'un des deux ait une agression d'au moins 1 (ou les deux d'au moins 1).
Du moment ou les deux sont neutres l'un envers l'autre au départ de ton mod, et que l'un a une agression de 1, celui-ci entrera en combat dès que sa disposition passera à "ennemi", donc -3 ou -4.

Si cette disposition est seulement Rival ou Foe (adversaire), c'est considéré comme neutre. Je crois que c'est surtout utilisé pour gérer les niveaux de langage, qui peuvent passer de neutre à sarcastique puis injurieux, puis ainsi de gérer le passage à "ennemi" et le déclenchement d'un combat.
Cela est certainement aussi utilisé pour les avertissements lorsqu'un PNJ A frappe un PNJ B amical (exemple A considère B comme neutre mais A est très agressif). B n'entre pas en combat tout de suite, et tolère une frappe dite "amicale", puis évolue progressivement pour entrer lui-même en combat, ou fuir... selon sa confidence.

Cependant, la disposition peut aussi être définie par les factions auxquelles appartiennent chacun des acteurs... Une faction peut être définie comme amie ou ennemie d'une autre faction. Faire entrer dans une conversation un pnj dans une faction et l'autre dans la faction opposée peut déclencher un combat (ou une fuite...). Ensuite c'est commode de faire une bagarre générale si tu en as un jour besoin : assistance 2 pour chaque membre des deux factions, par exemple.
Maintenant les deux solutions que je te propose.


Dernière édition par Mike89 le Jeu 27 Fév 2020, 16:53, édité 1 fois
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 16:10

Solution 1 : mettre un bout de script dans la boîte du papyrus fragment.
Dans les conversations, tu modifies la valeur du relationship rank de l'acteur, qui prononce la phrase fatale, vis à vis de l'autre acteur :
SetRelationshipRank(id de la cible, -4)
La fonction s'applique à la valeur de l'acteur qui parle, pour l'acteur cible que tu désignes.
Par exemple : -3 ou -4 cela devrait marcher, si tu as mis les bonnes valeurs d'Aggression et Confidence aux deux pnj.

Solution 2 :
Faire adhérer le pnj à une faction ennemie de la faction à laquelle appartient l'autre pnj
SetFactionRank(id de la faction, 0)
Cela fait entrer le PNJ qui parle dans la faction s'il n'y est pas déjà.
Si ta faction a plusieurs rangs, tu peux indiquer un autre rang que 0 : général, capitaine, sergent... tout ce que tu peux imaginer qui peut te servir dans ton mod.
Il faut donc créer les deux factions, et indiquer que l'un des deux est déjà membre de la faction opposée. [autre solution : faire adhérer au fil des conversations, l'un à l'OM et l'autre au PSG... Triste )]
La disposition des factions entre-elles est réglée par les valeurs de Group Combat Reaction

  • Neutral, Ally, Enemy, ou Friend.

C'est comme pour le Relationship vu plus haut entre seulement deux acteurs.

Voilà, j'ai fini. Si tu as des questions, ou si cela ne marche pas (je ne suis pas sûr des syntaxes des fonctions de script...), n'hésite pas. Il faut que je réinstalle le CK pour être plus sûr, mais tu devrais t'en tirer avec ce que je t'ai indiqué.

Post Scriptum : si tu indiques une disposition particulière entre pnj A et pnj B (donc autre que 0) lors de la création du PNJ, celle-ci prévaut sur celle entre factions...
Donc, utilise soit la relationship du PNJ, soit celle de la faction... sauf si tu veux par exemple que certains PNJ n'obéissent pas systématiquement aux règles de leurs factions respectives : faction A et factions B sont ennemies, mais le pnj A1 est ami, ou de la famille (allié) de B1. Ou au contraire factions amies mais PNJ ennemis.
Revenir en haut Aller en bas
Conan33
Moddeur
Moddeur
Conan33


Masculin Nombre de messages : 4
Age : 38
Date d'inscription : 28/01/2020

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 20:39

Bonsoir Mike,

J'ai essayé tout ce que tu m'as expliqué et cela ne fonctionne toujours pas.

Au fait, c'est "GetRelationshipRank" et "GetFactionRank". Rigolo

Pourrais-tu utiliser le création kit chez toi et faire un exemple (dialogue + bagarre) sur une même scène stp ? Car là, pour tout te dire, je suis vraiment décourager. Triste

J'attendrai ta réponse Mike.

Merci pour ce que tu fais pour moi.

Cordialement.
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeJeu 27 Fév 2020, 21:19

Non, c'est bien Set... les deux existent.
Get... c'est pour connaitre la valeur actuelle et par exemple la tester dans un script, ou comme condition d'un dialogue, d'un package, d'une animation.
Set... c'est pour changer la valeur.
Si Set a été refusé, il faut que tu me donnes le message que tu as eu lorsque tu as cliqué sur "compile".
Ah oui : la fonction Set... c'est pas une condition de dialogue, c'est un ordre à exécuter dans la fenêtre de script. (Je ne sais pas ce que tu connais dans le détail, et j'ai peut être loupé une explication.

Je testerai demain, et avec la console simplement, en créant deux PNJ non agressifs, et en changeant leurs valeurs de RelationShip.
Si cela marche en faisant la modif à la console, cela devrait le faire aussi en faisant les mêmes changements dans un dialogue.

Faudrait que tu me dises ce que tu connais à propos de la console, et les tests que l'on peut faire dedans pendant l'exécution du jeu. Cela permet souvent de savoir ce qui ne va pas.
Revenir en haut Aller en bas
Conan33
Moddeur
Moddeur
Conan33


Masculin Nombre de messages : 4
Age : 38
Date d'inscription : 28/01/2020

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeVen 28 Fév 2020, 10:17

Bonjour Mike,

Autant pour moi, j'ai confondu. Surpris

Cela me fait un message d'erreur. Tiens, je t'ai fait une capture d'écran :

Modifier le comportement d'un PNJ ? Probls10

Je ne sais pas quoi faire ?

Cordialement.
Revenir en haut Aller en bas
Mike89
Maître ArchipelModeur
Maître ArchipelModeur
Mike89


Masculin Nombre de messages : 3151
Age : 68
Date d'inscription : 06/03/2007

Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitimeVen 27 Mar 2020, 10:18

Résumé de la solution (conversation par MP)
Le script fonctionne bien, mais il faut l'habiller correctement, le compilateur Papyrus étant plus exigeant du point de vue syntaxe que pour les scripts d'Oblivion par exemple, que je maîtrise bien mieux. Donc :
* il n'y a pas de "speaker" par défaut pour désigner à qui appliquer une fonction, il faut le mentionner
* dans les scripts situés dans les boîtes de dialogue/topic le speaker est désigné par la variable pré-définie akSpeaker
* la fonction SetRelationshipRank() s'applique à deux pnj, il faut donc deux variables pour les identifier, ou fonctions qui peuvent remplacer ces variables : l'un est akspeaker, l'autre est celui a qui il parle.
* celui à qui il parle est donné par la fonction akSpeaker.GetDialogueTarget()
* l'ensemble de la syntaxe qui permet de mettre la relation entre acteurs à -3 sera donc :
akSpeaker.SetRelationshipRank(akSpeaker.GetDialogueTarget(), -3)
J'ai ajouté, pour garantir l'application immédiate du nouveau comportement :
akSpeaker.EvaluatePackage()
Dans le cas du problème posé, le changement d'attitude (combat...) fait passer la quête au stage 10 :
GetOwningQuest().SetStage(10)

L'ensemble du fragment Papyrus code source est donc :
akSpeaker.SetRelationshipRank(akSpeaker.GetDialogueTarget(), -3)
akSpeaker.EvaluatePackage()
GetOwningQuest().SetStage(10)


Il est possible à la place de akspeaker et de GetDialogueTarget() d'utiliser les alias de pnj définis pour la quête. Mais le bout de script n'est pas réutilisable tel quel.
En utilisant akspeaker, la fonction changera l'attitude des deux pnj en cours de dialogue, quelque soit leur identité, lorsque la phrase est dite. C'est important pour les infos qui peuvent être dites par un ensemble de personnages. Si l'on met dans un script des alias de personnages précis, ce script s'appliquera uniquement à ces deux personnages, mais pas à ceux qui sont réellement en conversation.
Revenir en haut Aller en bas
Contenu sponsorisé





Modifier le comportement d'un PNJ ? Empty
MessageSujet: Re: Modifier le comportement d'un PNJ ?   Modifier le comportement d'un PNJ ? Icon_minitime

Revenir en haut Aller en bas
 
Modifier le comportement d'un PNJ ?
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» modifier un inventaire
» Modifier son .ini >>> Tutorial
» Modifier le gameplay d'oblivion?
» Modifier un mod dont je ne suis pas auteur
» Comment Modifier Les Textures D'un Pnj Déjà Existant ?

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum WTeam :: Public :: Vous avez un problème avec Skyrim et ses mods ?-
Sauter vers: