Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Membre de faction qui se defendent pas entre eux
Membre de faction qui se defendent pas entre eux
Par irec le 30/11/2002 à 14:35:14 (#2679522)
j'ai creer une faction qui est neutre mais limite hostile face au pj , donc kan je met un groupe de cette faction en face des pj , il n'y a pas attaque , en revanche si un pj attaque un membre de cette faction les autre membre ne le defendent pas , il reste la comme des cons ( c des orcs ok , c con un orc , mais la ... )
Par eMRaistlin le 30/11/2002 à 15:35:25 (#2679877)
Ce que tu doit verifier, c'est que les script de base de Bioware soient bien tous activés dans les proprietes de tes PnJ :
Cherche ceux oiu il y a un SILENT_SHOUt, c'est ceux la qui vont permettre aux PnJ d'interagir entre eux. si il y en a sous commentaire, de-commente les, si tu en a enleve, remet les... etc...etc ^^
Par irec le 30/11/2002 à 21:34:26 (#2681893)
Par coolstar le 30/11/2002 à 23:15:55 (#2682298)
Dans l'extrême cas, soumet ton module.mod en dl pour que l'on voit se qui s'y passe... :D
;)
Par irec le 2/12/2002 à 14:27:28 (#2692884)
--------------
void main()
{
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);
}
----------------------
Par eMRaistlin le 2/12/2002 à 14:59:54 (#2693139)
J'ai modifie le fichier repadjust.2da, afin d'enlever les modificateurs qui arrangent la reputation en fonction de l'acte commis. Ca aurait dut suffire, mais helas, cela ne suffit pas.
J'ai donc affecté un script OnDeath qui fait un truc dans ce genre :
int nRepactual = GetFactionAverageReputation(oRespawn,oTarget);
AdjustReputation(oTarget,oRespawn, 50-nRepactual);
Et cela, en partant du principe qu'il n'existe pas de SetReputation pour les faction NON-standarts, je fais un adjuste qui est censé Ajouter a X +(50-X). J'aurais bien espere que ca ferait 50, mais ce n'est pas le cas.
Enfin, pour finir : Sur tous les scripts des monstres non-aggro, j'ai mis sous commentaire toutes les lignes avec un "SILENT_SHOUT" du style "NW_I_WAS_ATTACKED" ou du style.
Enfin, j'ai rajouté une ligne ClearPersonnalReputation juste avant le script pre-cité... histoire d'assainir les bases.
Et meme comme ca, a la fin, les monstres au alentours finissent par devenir Friendly...oO;
Donc, au final, j'en suis la, avec un anneau special qui rend un monstre aggro afin de pouvoir l'attaquer (mon module est en NO-PVP) en faisant un UniquePower qui lance un SetTemporaryEnnemy sur le monstre.
Ca marche bien mais c'est pas propre. Je ne sais pas ce qui m'a echappé, vu que à priori, je pensait avoir tout modifié, mais il est evident empiriquement que ce n'est pas le cas.
Mais je cherche encore, et je compte bien pavnir a mes fins...
Par irec le 2/12/2002 à 15:04:51 (#2693172)
c mon script (enfin celui creer par l'editeur :p
-----
#include "nw_i0_generic"
void main()
{
// Paramétrer la faction de manière à ce qu'elle déteste le joueur et l'attaque
AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);
DetermineCombatRound(GetPCSpeaker());
}
----------------------
meme la faction change , mais c une faction perso que porte le NPC , donc je c pas pkoi il attaque pas et encore moins pkoi j'ai une message d'erreur .
:(
Par eMRaistlin le 2/12/2002 à 15:13:43 (#2693246)
Pour le message d'erreur, je te dirait bien, mais je vois pas de quoi tu parle. tu pourrais l'ecrire ?
Par irec le 2/12/2002 à 15:23:22 (#2693338)
Script at_005, OID : 80000020, tag Generic Trigger, ERREUR, DIVIDE BY ZERO
Par eMRaistlin le 2/12/2002 à 15:30:06 (#2693406)
ca, ca veut dire que ton Script n'est pas dans une conversation, vu que tu utilise le GetPCSpeaker() et que c'est l'erreur type des Get qui sont pas a leur place ^^
[Edit = eauretograffe]
Par irec le 2/12/2002 à 15:36:37 (#2693464)
Par eMRaistlin le 2/12/2002 à 15:56:17 (#2693666)
tu lui demande de te recuperer qui est le PC qui parle, et y'a qu'un trigger en face... Essaye avec object oPC = GetNearestObject(OBJECT_TYPE_CREATURE,CREATURE_TYPE_PC);
Par irec le 2/12/2002 à 16:00:11 (#2693708)
Par eMRaistlin le 2/12/2002 à 16:23:06 (#2693897)
#include "nw_i0_generic"
void main()
{
object oPC = GetNearestObject(OBJECT_TYPE_CREATURE,CREATURE_TYPE_PC);
// Paramétrer la faction de manière à ce qu'elle déteste le joueur et l'attaque
AdjustReputation(oPC,OBJECT_SELF, -100);
DetermineCombatRound(oPC);
}
Par irec le 2/12/2002 à 16:40:37 (#2694050)
ca compile pas :(
ERREUR : VARIABLE DEFINED WITHOUT TYPE
Par eMRaistlin le 2/12/2002 à 16:46:19 (#2694102)
#include "nw_i0_generic"
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
// Paramétrer la faction de manière à ce qu'elle déteste le joueur et l'attaque
AdjustReputation(oPC,OBJECT_SELF, -100);
DetermineCombatRound(oPC);
}
Par irec le 2/12/2002 à 19:04:39 (#2695421)
:)
Par coolstar le 2/12/2002 à 20:38:29 (#2696362)
;)
Par eMRaistlin le 2/12/2002 à 20:42:02 (#2696394)
Je corrige que 50% du truc...
Quel c** des fois, quand meme...
dans ton script (et le mien, par la meme occasion... *sic*), on a
AdjustReputation(oPC,OBJECT_SELF, -100);
Or, OBJECT_SELF refere au trigger... je pense pas que ce soit prevu pour ca...
Essaye ca :
#include "nw_i0_generic"
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
object oNPC = GetObjectByTag("TAG_NPC")
// Paramétrer la faction de manière à ce qu'elle déteste le joueur et l'attaque
AdjustReputation(oPC,oNPC, -100);
AssignCommand(oNPC,DetermineCombatRound(oPC);
}
Par coolstar le 2/12/2002 à 21:01:18 (#2696555)
1) Je persiste à dire que GetEnteringObject() devrait tout aussi bien faire l'affaire... :D
2) Quel Ane-Haut je fais moi aussi! avais même pas vu le blème de l'OBJECT_SELF... bien vu quand même eMR! :mdr:
Par irec le 2/12/2002 à 21:27:45 (#2696809)
celui la pose un probleme a la compilation , je vais essayer le script en ignorant cette ligne
edit : ben celui la aussi tiens :)
AssignCommand(oNPC,DetermineCombatRound(oPC));
Par Jedaï le 2/12/2002 à 21:38:00 (#2696902)
Quand deux lignes comme ça pose problème, on regarde avant les deux lignes, et qu'est-ce qu'on voit ?
Il manque un ";" !:mdr:
Rétablit tes deux lignes elles sont indispensables et rajoute plutôt le point-virgule après GetPCSpeaker() !:p
Par irec le 2/12/2002 à 21:47:22 (#2696980)
Par irec le 2/12/2002 à 22:03:14 (#2697130)
je l'ai placer sur une "action taken" d'un orc et le tag du script c le Blue_ref de l'orc ( c un perso peronnalisé )
pkoi il n'attaque passsss ???
Par coolstar le 2/12/2002 à 22:27:37 (#2697340)
:D
Par irec le 2/12/2002 à 22:34:28 (#2697378)
----------
#include "nw_i0_generic"
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
object oNPC = GetObjectByTag("orca002");
// Paramétrer la faction de manière à ce qu'elle déteste le joueur et l'attaque
AdjustReputation(oPC,oNPC, -100);
AssignCommand(oNPC,DetermineCombatRound(oPC));
}
------------
Par coolstar le 2/12/2002 à 22:39:45 (#2697431)
PS : N'oublie pas les "Balises" PHP quand tu nous soumets un Script! ;)
Par eMRaistlin le 3/12/2002 à 0:29:30 (#2698244)
A LA FIN DES CONVERSATIONS, BIOWARE A PLACE UN CLEARALLACTIONS....
ENLEVEZ LE, ou faites des delaycommand !!!!!!!!!
Par coolstar le 3/12/2002 à 0:33:38 (#2698268)
:D
Par coolstar le 3/12/2002 à 7:13:12 (#2699114)
Provient du message de irec
Script at_005, OID : 80000020, tag Generic Trigger, ERREUR, DIVIDE BY ZERO
Provient du message de eMRaistlin
Ok...
ca, ca veut dire que ton Script n'est pas dans une conversation, vu que tu utilise le GetPCSpeaker() et que c'est l'erreur type des Get qui sont pas a leur place ^^
Bon, perso j'ai regardé vite fait ce que ça donnait chez moi... et si c'est bien une attaque que tu veux déclencher par le biais d'un Script de Trigger, voilà effectivement la démarche à suivre et ça passe...#include "nw_i0_generic"
void main()
{
object oPC = GetEnteringObject();
object oNPC = GetObjectByTag("orca002");
// Paramétrer la faction de manière à ce qu'elle déteste le joueur et l'attaque
AdjustReputation(oPC,oNPC, -100);
AssignCommand(oNPC,DetermineCombatRound(oPC));
}
^^
Par Mastokk le 3/12/2002 à 12:15:14 (#2700611)
Provient du message de eMRaistlin
ATTENTION : ON NE LE DIRA JAMAIS ASSEZ :
A LA FIN DES CONVERSATIONS, BIOWARE A PLACE UN CLEARALLACTIONS....
ENLEVEZ LE, ou faites des delaycommand !!!!!!!!!
Je crois que ça a sa place en persistant ça eMR.
Par eMRaistlin le 3/12/2002 à 12:23:44 (#2700691)
Mais je prepare un persistant sur les problemes usuels... Ca devrait le faire ^^
Re: Membre de faction qui se defendent pas entre eux
Par Mastokk le 3/12/2002 à 14:27:42 (#2701722)
Provient du message de irec
Apres avoir verifier les tutoriaux et ancien post , je n'est pas trouver de reponse , donc un nouveau post :) (comme on me l'a conseiller ) voila mon probleme ( un de mes probleme)
j'ai creer une faction qui est neutre mais limite hostile face au pj , donc kan je met un groupe de cette faction en face des pj , il n'y a pas attaque , en revanche si un pj attaque un membre de cette faction les autre membre ne le defendent pas , il reste la comme des cons ( c des orcs ok , c con un orc , mais la ... )
C'est un problème de OnPerceived. En fait j'ai le même problème avec la réaction d'un groupe d'aventuriers dans une taverne... Selon certaines réponses, le membre du groupe à qui l'on parle devient hostile et attaque. Tous les autres membres du groupe passent hostile comme il se doit mais n'attaquent pas (alors que ce serait mieux bien sûr).
Le problème vient du OnPerceived. Comme le PJ qui devient hostile à la faction du PNJ est déjà dans la zone de perception de celui-ci, le script de OnPerceived qui devrait déclencher l'attaque n'est pas lancé. Donc les PNJ censés attaquer normalement restent bêtement là, sur place, sans rien faire.
Je n'ai toujours pas trouvé quoi faire pour remédier à ce problème... peut être un script sur le OnHeartBeat ?:confus:
Par eMRaistlin le 3/12/2002 à 14:31:01 (#2701749)
Par Jaha Effect le 3/12/2002 à 14:31:45 (#2701752)
Oui je suppose :)
Jaha Effect :D
Par coolstar le 3/12/2002 à 14:40:07 (#2701815)
Provient du message de eMRaistlin
ATTENTION : ON NE LE DIRA JAMAIS ASSEZ :
A LA FIN DES CONVERSATIONS, BIOWARE A PLACE UN CLEARALLACTIONS....
ENLEVEZ LE, ou faites des delaycommand !!!!!!!!!
J'vous aurais bien raconter une longue histoire, mais ça serait bien trop long... :D
TIPS !!!
Alors, je vais juste vous dire que cette nuit j'ai expérimenté la preuve par dix de ce que eMR essayait de nous faire passer...
J'ai dû perdre au moins 2 heures d'incompréhension désespérée à essayer de saisir pourquoi un Script que j'avais parfaitement compilé ne voulais pas marcher, contre toute attente (j'étais sûr de mes résultats) ???
Et soudain la petit phrase de eMR (pas si petite hein ? :D ) m'est revenue à l'esprit comme un éclair de génie... CES SATANEES CLEARALLACTIONS PAR DEFAUT !!!
Je l'avais bien lu, mais combien y a-t-il de choses que l'on est sensé savoir et que l'on ne percute pourtant pas au moment voulu ??? D'autant que j'avais déjà tenté d'esquiver ce principe en ayant été confronté au prob avec les NPCs qui ne veulent pas rester assis quand on leur parle ! (j'avais pensé alors à mettre aussi le Script pour asseoir à la place des
Fins de concertation, afin d'éviter les OnHeartBeat...) :D
Alors voilà, repensant aux propos de eMR, j'ai eu soudain une idée extra (enfin, en tout cas je l'ai vécu comme ça! :D) pour que les Fins de conversation ne me posent plus de prob ET sans les enlever !! (j'ai quand même envi de garder les fonctions bien pensées de Bioware...:D )
Je me suis dit juste, en repensant à la remarque insistante et judicieuse de eMR... Bon sang, mais c'est bien sûr, si le ClearAllActions a lieu de suite au moment de la Fin de conversation, elle ne doit pas pouvoir affecter les Commandes qui n'ont pas encore eu lieu donc ?!! Il suffirait juste alors de retarder les Commandes pour qu'elles ne sautent plus ?? :D Genre au moins 1/10e de sec ???
OUI!! ET CA MARCHE !!! :D :D
;)
Ha bon, eMR l'avais déjà dit ça aussi ??? Bon je sorts... :D
Par Mastokk le 3/12/2002 à 14:55:54 (#2701950)
Provient du message de Jaha Effect
Tu as essayé de réduire le champs de perception et essayé d'écarter un peu tes PNJ ?
Oui je suppose :)
Jaha Effect :D
En fait les deux choses dont tu me parles vont ensembles. Mais réfléchissons:
Si je les écarte ou si je réduis le champ de perception, finalement c'est la même chose, je cherche à donner la possibilité au PJ d'entrer dans la zone de perception.
Bhaa oui, c'est bien de donner cette possibilité mais en fait, on aura pas l'effet recherché puisque ce qu'on cherche, c'est à faire attaquer tout le groupe en même temps et pas à ce que le reste du groupe se fasse attaquer après que le premier membre se soit fait éventrer par une bande de PJ hilares. Donc réduire la taille du champ de perception (ça se fait dans l'onglet advanced des propriétés de la créature pour ceux qui ne sauraient pas) ou éloigner les personnage reviennent à la même chose et ne donnent pas l'effet recherché.
eMR > Donc un script d'attaque sur le UserDefeined devrait suffire tu pense ? Je vais voir ça (vais voir si j'arrive à pondre un truc déjà ;)) Si ça marche je reviens poster (si ça marche pas aussi d'ailleurs :D)
Par Mastokk le 3/12/2002 à 16:17:03 (#2702481)
#include "nw_i0_generic"
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
object oRep = GetReputation(OBJECT_SELF, oPC);
if (oRep <= 10)
{
DetermineCombatRound(oPC);
}
}
Je sais pas du tout utiliser le GetReputation et ça veut pas compiler...
Par eMRaistlin le 3/12/2002 à 16:30:54 (#2702571)
Par Mastokk le 3/12/2002 à 16:49:31 (#2702722)
#include "nw_i0_generic"
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC, OBJECT_SELF);
int oRep = GetReputation(OBJECT_SELF, oPC);
if (oRep <= 10)
{
DetermineCombatRound(oPC);
}
}
ça compile mais ça ne change rien au comportement des NPC
:confus:
Par eMRaistlin le 3/12/2002 à 17:12:11 (#2702899)
Sinon, je te conseille de jeter un coup d'oeil dans les persistants a propos du UserDefined.
Si oui, alors je vois pas trop...
Par coolstar le 3/12/2002 à 17:17:22 (#2702938)
Par eMRaistlin le 3/12/2002 à 17:21:43 (#2702980)
Heeuuu... J'ai lancé une info stérile ??
:mdr: :mdr: nonon, c'etait parfait... mais apres, c'est une question de choix ^^:mdr: :mdr:
Moi, je ne fais que repondre aux questions...
Par coolstar le 3/12/2002 à 17:46:41 (#2703218)
Par Mastokk le 11/12/2002 à 12:08:42 (#2759179)
1) Activer ces 2 lignes (en enlevant les // devant) dans le script de OnSpawn:
SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET);
SetListeningPatterns();
2) Assurez-vous que votre faction est bien friendly avec elle-même et pas neutre ! Si'ils ne sont pas amicaux entre eux, ils ne se défendent pas les uns les autres !
3) Si vous avez toujours des problème après ça, regardez ce qui a été dit plus haut dans ce message...
JOL Archives 1.0.1
@ JOL / JeuxOnLine