Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > comment reussir un changement de faction ?
comment reussir un changement de faction ?
Par Syilph le 11/7/2002 à 21:59:04 (#1793506)
je tiens a exposer tout dabord devant vous mon caractere quichesque :-) ... enfin grace a pas mal de gentils gens qui ecrivent ici je progresse tout doucement mais surement ...
mon souci est le suivant :
depart
il y a un groupe de 4 bandits, et un NPC. Les 4 bandit et le NPC sont neutres au depart.
je veux que :
a un moment de la conversation, sur une phrase que va dire le joueur au npc (une menace :) , les bandits changent de faction et attaquent le joueur ..... rien de bien compliqué mais une montagne pour moi :)
ce que j'ai fait :
- je cree un bandit que j'ajoute dans ma palette custom
- je copie trois autre bandit sur ce modele
- je donne le meme tag "bandit" a ces 4 bandits (car initialement ils tournent sur 4 waypoints)
- je cree le dialogue avec le NPC
- a un moment du dialogue, sur une replique du NPC, j'ajoute un script sur le action taken , script qui est le suivant :
void main()
{
object obandit ;
object oennemi ;
obandit = GetNearestObjectByTag ("bandit") ;
oennemi = GetNearestObjectByTag ("ennemi") ;
ChangeFaction (obandit, oennemi);
}
(m'a semblait comprendre qu'il fallait que la solution cetait de donner a mes bandits la meme faction qu'un mechant)
- pour que ca marche je cree alors un monstre auquel je donne le tag "ennemi"
- je donne a cet ennemi une faction hostile (sauf quelle n'attaque pas la faction du NPC)
Résultat :
je fais un essai en jeu et lorsque mon joueur selectionne la replique a pas choisir :) il se passe :
- mon curseur se transforme en epee sur un seul des bandits parmi les 4, reste en conversation sur les 3 autres (pourtant ont le meme tag)
- ce soi disant bandit ne m'attaque pourtant pas
- il strucide un autre NPC qui passait par la ce qui provoque la furie des 3 autre bandits qui l'éliminent...
Bon au final mon joueur qui devait se faire massacrer se retrouve tranquillou,
alors j'ai deux questions si vous arrivez a vous y retrouver :
1 : pourquoi un seul sur mes 4 bandits est devenu pseudo mechant
2 : pourquoi en pseudo mechant n'a til pas attaquer le joueur a vue ?
3 : la question idiote quelle est la faction par defaut assigne au joueur :(
bon je fais tout au feeling en utilisant les fonctions selon leur nom evocateur et avec la syntaxe que je crois y lire mais j'ai aucune experience en programmation donc j'ai surement fait une grosse betise, me flagellez pas
merci si vous avez une astuce a donner a un createur debutant qui desespere de faire tuer les mechants joueurs :)
Par Cassin le 12/7/2002 à 9:30:06 (#1795043)
Après tu la règles pour qu'ils soient neutres envers les NPC et les PJ, et sur ta phrase menace, tu mets un script qui fait changer la relation de la faction "Bandits" envers les PNJ et les PC (tu mets à 0 quoi).
Désolé de pas mettre le script, je l'ai pas sous la main, mais ça doit pas être bien sorcier à faire ;)
Par Gargantuel le 12/7/2002 à 10:12:05 (#1795208)
1 : pourquoi un seul sur mes 4 bandits est devenu pseudo mechant
Quand tu executes l'inscruction
obandit = GetNearestObjectByTag ("bandit") ;
obandit contient un seul des quatres bandits (le plus proche). Donc ton script ne fonctionne que pour un seul.
2 : pourquoi en pseudo mechant n'a til pas attaquer le joueur a vue ?
Pas très clair pour moi. Il est décrit comment ton NPC ? quelle faction ?
Enfin quoi qu'il en soit, déclenches toi meme le combat ca sera beaucoup plus facile :
AssignCommand(oBandit, ActionAttack(oNPC));
3 : la question idiote quelle est la faction par defaut assigne au joueur
la faction PC (Player Character).
Bon maintenant passons à la solution. Je peux pas tester alors je donne juste une piste.
Tu mets tes 4 bandits dans une nouvelle faction que tu appelles Bandit. Elle doit etre à 50% avec tout le monde sauf hostile.
void main()
{
// on récupere le 1er bandit qui passe
object oBandit = GetNearestObjectByTag("bandit") ;
// on récupère le NPC
object oNPC = GetNearestObjectByTag("MyNPC") ;
// On change les parametres de la faction
AdjustReputation(oNPC, oBandit, -100); // Tout les bandits seront affectés
// On fait une boucle pour faire attaquer tout les bandits
object oCurrentBandit = GetFirstFactionMember(oBandit);
while (oCurrentBandit != OBJECT_INVALID)
{
AssignCommand(oCurrentBandit, ActionAttack(oNPC));
oCurrentBandit = GetNextFactionMember(oBandit);
}
}
Si tu as des effets de bord, tu devras peut etre affecter une faction spécifique à ton NPC (si tu veux pas que tes bandits attaquent tout les NPC du coin par exemple)
J'ai pas testé, y a peut etre plus simple mais là je suis au boulot, désolé.
Par Pelleas le 12/7/2002 à 11:01:35 (#1795413)
Tu crée 2 factions:
- Bandits, affectée a tes 4 bandits
- NPC, affecté a ton NPC
avec Bandits friendly sur NPC (full bleu 100%) et ces 2 factions neutres par rapport aux PC (Faction Editor)
Et tu fais juste un script avec le wizard, action taken>perform an action>Attack sur ton node de conversation.
Ton NPC va alors attaquer le PC et comme les bandits sont friendly avec la faction du NPC, ils vont assist.
Pas besoin de créer ces scripts compliqués... :)
Par Syilph le 12/7/2002 à 12:57:13 (#1795984)
vous etes bien sympa comme dhab,
Je m'apercois encore qu'en reflechissant mieux j'aurais pu trouver des solutions, j'avais pas trouve la commande adjustreputation (ya po le mot faction dedans :) et pis je decouvre le script wizard dans le module de conversation vrai que ca peut bien servir....
mais d'un autre côté comme ca je decouvre peu à peu :-)
merci bien pour vos pistes et le temps que vous passez a nous aider nous pauvres novices (synonyme plus evolue et plus facile a porter que quiche apres mure reflexion :)
Par Gargantuel le 12/7/2002 à 13:00:21 (#1795998)
je veux que :
a un moment de la conversation, sur une phrase que va dire le joueur au npc (une menace , les bandits changent de faction et attaquent le joueur .
Arf j'avais rien compris !
Je croyais que les bandits devaient attaquer le NPC moa :rasta:
NB: Faites gaffe au script wizard, y a des fois où il génère n'importe quoi (cf mon post un peu plus bas)
Par Syilph le 13/7/2002 à 13:12:55 (#1800224)
Par contre on m'enlèveras po d ela tête que c'est bizarre ces histoires de Factions. Si je change la reputation de mes bandits par rapport au PC comme ca sans le dire expressemment de l'attaquer ben..... tous les bandits continue leur chemin tranquillement jusqu'à ce que l'un deux finalement se dise "oh mais c'est vrai tiens c'est un mechant ce joueur si je l'attaquais" ... et hop il part attaquer le PC sous les yeux etonnes de ces potes bandits qui bougent po le petit doigt :))
A croire qu'un bandit ca a bon fond et que meme si on lui dit ben il va rechigner a attaquer un pauvre joueur egare :))
Enfin je le dirais pas assez mais heuresement que vous etes la j'apprends beaucoup sur toutes les reponses que vous donnez aux differents post d'appel au secours :)
Par Gargantuel le 13/7/2002 à 13:37:02 (#1800316)
Si tu est dans une conversation, utilises GetPCSpeaker() et si ce n'est pas le cas tu as d'autres fonctions en fonction du contexte. Au pire utilises la fonction GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC) qui te renverras le joueur le plus proche.
JOL Archives 1.0.1
@ JOL / JeuxOnLine