Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Membre de faction qui se defendent pas entre eux

Par irec le 30/11/2002 à 14:35:14 (#2679522)

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 ... )

Par eMRaistlin le 30/11/2002 à 15:35:25 (#2679877)

quand tu dis limite, ca veutr dire avec une Rep à 11, ou à 20 ?

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)

limite cad a 2 point du hostile :)

Par coolstar le 30/11/2002 à 23:15:55 (#2682298)

Hi!


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)

Ya pas de cas extreme kan meme :) , la j'ai reussi suite a une conversation a changer le niveau de faction d'un NPC , le truc c que je c pas comment dans la meme commande , faire changer le niveau de faction de tout les autre autour , pour l'instant mon script ressemble a ca


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

void main()
{


AdjustReputation(GetPCSpeaker(), OBJECT_SELF, -100);

}

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

Par eMRaistlin le 2/12/2002 à 14:59:54 (#2693139)

c'est tres compliqué (pour tout t'avouer, je ne suis pas encore satisfait de ce que j'ai fait :

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)

ca a l'air un peu compliquer ca :), j'ai lacher l'idée pour le moment du changement d'etat sur la faction , et j'ai preferer mettre une commande d'attaque ( pour les besoin de ma scene c suffisant ) le probleme c que ( j'ai utiliser le wizard ) en jeu personne n'attaque personne et j'ai un message d'erreur en jaune dans la boite de dialogue ,
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)

Bein... essaye de mettre ActionAttack(oPC) apres ton DetermineCombatRound.

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)

voila c ca : ( at_005 c le nom de mon script )

Script at_005, OID : 80000020, tag Generic Trigger, ERREUR, DIVIDE BY ZERO

Par eMRaistlin le 2/12/2002 à 15:30:06 (#2693406)

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 ^^



[Edit = eauretograffe]

Par irec le 2/12/2002 à 15:36:37 (#2693464)

pourtant mon script d'attaque est dans une conversation ( interactive entre 2 PNJ ) declanchée par un trigger portant le script at_005 .

Par eMRaistlin le 2/12/2002 à 15:56:17 (#2693666)

Ben, ca doit venir de la :

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)

tu pourrais corriger le script de la facon dont tu pense qu'il fonctionnerai ? :)

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)

object oPC = GetNearestObject(OBJECT_TYPE_CREATURE , CREATURE_TYPE_PC);

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)

Je viens de le tester et j'ai toujours le message d'erreur ? comment corriger ca ?
:)

Par coolstar le 2/12/2002 à 20:38:29 (#2696362)

Tu ne le précises pas, mais si c bien à la suite des ActionSpeakString déclenchés par le Trigger, dans lequel le Pc est entré, que doit se dérouler l'attaque, c pas plutôt GetEnteringObject() qu'il faudrait ??? :D

;)

Par eMRaistlin le 2/12/2002 à 20:42:02 (#2696394)

Non... je suis bete...


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)

AdjustReputation(oPC,oNPC, -100);

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)

:D :D
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)

eh ben voila :) la c compiler , reste a voir si maintenant ce c** d'orc va enfin attaquer

Par irec le 2/12/2002 à 22:03:14 (#2697130)

rien a faire , ya plus d'erreur , mais il n'attaque pas , ce script la
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)

Alors on reprend encore une fois Irec! Mets-nous le Script si tu veux que l'on sache exactement de quoi tu parles !!! :enerve:


:D

Par irec le 2/12/2002 à 22:34:28 (#2697378)

ben si je l'ai pas mis c parcequ'il est 3 post plus haut :)

----------

#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)

Oups! j'avais pas calculé que c'était la reprise de la dernière proposition de eMR! Sorry!! :D



PS : N'oublie pas les "Balises" PHP quand tu nous soumets un Script! ;)

Par eMRaistlin le 3/12/2002 à 0:29:30 (#2698244)

ATTENTION : ON NE LE DIRA JAMAIS ASSEZ :


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)

A propos des fonctions Bioware par défaut eMR (ou un autre...), c normal que si je mets un Dial d'une seule phrase ça ne déclenche pas les Actions Conséquentes ??? :confus:

: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)

Ben... je l'avais deja mis...


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)

Pour cela, l mieux, ce sera un UserDeifned, ou un SILENT_SHOUT

Par Jaha Effect le 3/12/2002 à 14:31:45 (#2701752)

Tu as essayé de réduire le champs de perception et essayé d'écarter un peu tes PNJ ?
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)

Bon j'ai mis ça dans le OnUserDefined:

#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)

Attention, tu as utilis un objet pour definir la reputation, or c'est un integer qu'il faut utiliser...

Par Mastokk le 3/12/2002 à 16:49:31 (#2702722)

je l'ai modifié

#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)

Euh... tu utilise bien les EventUserdefined et tutti-quantti ?

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)

Heeuuu... J'ai lancé une info stérile ?? :confus:

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)

Pour s'assurer que les membres d'une même faction vont se défendre entre eux:

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