Deux groupes = enemis

Répondre
Partager Rechercher
Ceci a trait aux factions. Il faut déjà pouvoir créer un système de faction. Et je pense qu'un tel sujet ne peut pas raisonnablement être expliqué sur un forum.

Note : Le système de faction de Bioware est le coeur de NWN. Tout repose sur ce système.
De quoi parles-tu exactement ?
Deux groupes de PJs ou de PNJs ?

Dans le cas des PNJs, les rendre hostiles entre eux est assez simple, il suffit de les mettre dans des factions ennemies.

Pour les PJs c'est un peu différent. Certes, chaque groupe de PJ constitue une faction pour le moteur de jeu, mais ce n'est pas utilisable dans le cas du PVP.
En fait, tu dois utiliser les fonctions SetPCLike et SetPCDislike (si ma mémoire est bonne), qui permettent respectivement de faire que deux joueurs soient amis et ennemis.
Ensuite, tu dois faire ça pour chaque membre de chaque groupe, afin que tous soient hostiles entre eux.

Je crois que c'est comme ça qu'il faut s'y prendre, mais je ne l'ai jamais fait en ce qui me concerne, donc je suis pas sûr
Dans le principe c'est cela. Et oui il faut utiliser les fonctions que tu cites. Cependant, le problème est vraiment très complexe (C'est le problème le plus complexe sous NWN).

Rapidement, il faut pouvoir gérer l'ensemble des interactions factionnelles pour chaque PJ vis à vis de l'ensemble des factions. Concrètement Bioware, nous livre en standard un système composé de 4 factions (4 ou 5 je sais plus exactement ). Les relations interfactionnelles sont hard codés et le concepteur peut changer les relations entre elles et cela prendra effet immédiatement en jeu.

Mais, lorsqu'on décide de rajouter une nouvelle faction, là c'est vraiment une toute autre histoire. Car rien n'est prévue. Et il faut absolument tout codé. Pensez que les variables croissent de manière exponentielle. Donc, avec 10 factions par exemple, on doit être capable de gérer (10 x 10) x 2 variables x nombres de joueurs. Le chiffre devient astronomique rapidement.

La solution de stocker les variables sur un PJ, dans la base bioware ou dans une base MySQL est complètement irréaliste. On manipule des centaines de variables à chaque interactions entre PJ et PNJ. Donc voila pourquoi, il y a très peu (je n'ai jamais vu de module qui propose un système de faction puissant) de système de faction sur le vault.

Attention, je précise qu'il faut faire une énorme différence entre les système de guilde proposé sur le net et qui sont gérés par des joueurs eux-mêmes, avec le système de faction de Bioware.

Le moteur de jeu de Bioware est bâti sur le système de factions. Tous objets sous NWN est factionnable. Placables, creatures, trigger, pièges... donc, vous pensez bien que cela a une importance considérable. Et je peux vous dire que ca fonctionne à merveille.
Mickey, je suis pas sûr d'avoir tout saisi...

Quel rapport avec les factions de PNJs, si ça ne concerne que des PJs ?

Et sinon je suis pas d'accord, le problème le plus complexe c'est l'IA
Citation :
Quel rapport avec les factions de PNJs, si ça ne concerne que des PJs ?
Les factions sont des ensembles qui ont une portée globale. Tu ne peux pas dire que tu va créer une faction uniquement pour les PJ. Le système de faction de Bioware ne les prendra pas en compte car il n'y aura aucune relation interfactionnelle avec le monde. Une faction doit être un ensemble qui porte sur des objets du monde. N'oublie pas que les PJ ne peuvent pas (dans le cadre de la conception même du jeu) appartenir à une faction. Il faut ruser !

Si tu décides de créer 2 factions dans lesquelles tu mettrais uniquement des PJ (si on admet que tu a crée un système pour admettre un PJ dans une faction), ca ne fonctionnera pas, car à la base avec l'éditeur de faction d'aurora, tu dois assigner un minimum de 1 objet (autre que PJ) à la faction. Cet objet est sensé conservé le rapport de base entre toutes les autres factions et la sienne. Pour les 4 factions de bioware la méchanique de ces rapports est hardcodée. Pour les factions que tu va créer, il n'y aura aucune méchanique.

Beaucoup de programmeurs qui ont fait une approche des factions ont cru qu'on pouvait simplement déclarer les factions sous l'éditeur et que cela fonctionnerait ainsi. Certes si on met la faction A avec la faction B en hostile et qu'on place les deux créatures de chaque faction sur la même carte, ils vont s'entretuer. Mais le but des factions n'est pas simplement résumé à cet acte, et donc pas du tout atteint. Toute la méchanique de conservation des rapports et de leur persistance, n'est pas automatique. Voila le vrai problème. Et n'oublie pas qu'un PJ n'est pas factionnable.

Citation :
Et sinon je suis pas d'accord, le problème le plus complexe c'est l'IA
Oui. C'est vrai que si on avait l'IA à programmer ... je crois qu'on aurait abandonné NWN. Heureusement qu'on a pas d'IA à programmer sous NWN. Enfin ce n'est pas nécessaire pour faire fonctionner le jeu. Les factions si !
Citation :
Publié par Mickey974
Les factions sont des ensembles qui ont une portée globale. Tu ne peux pas dire que tu va créer une faction uniquement pour les PJ. Le système de faction de Bioware ne les prendra pas en compte car il n'y aura aucune relation interfactionnelle avec le monde. Une faction doit être un ensemble qui porte sur des objets du monde. N'oublie pas que les PJ ne peuvent pas (dans le cadre de la conception même du jeu) appartenir à une faction. Il faut ruser !

Si tu décides de créer 2 factions dans lesquelles tu mettrais uniquement des PJ (si on admet que tu a crée un système pour admettre un PJ dans une faction), ca ne fonctionnera pas, car à la base avec l'éditeur de faction d'aurora, tu dois assigner un minimum de 1 objet (autre que PJ) à la faction. Cet objet est sensé conservé le rapport de base entre toutes les autres factions et la sienne. Pour les 4 factions de bioware la méchanique de ces rapports est hardcodée. Pour les factions que tu va créer, il n'y aura aucune méchanique.
Ok, mais ... (désolé si je suis con aujourd'hui) la ruse dont tu parles, ce n'est pas justement d'utiliser SetPCLike et SetPCDislike pour créer l'hostilité entre les joueurs (un à un, et non entre factions de joueurs) ? si oui, ça n'a pas trop de rapport avec les factions de PNJs dont tu parles ...

PS: méCanique, pas méCHanique, pitié
Et si ca a un rapport. On est même en plein dedans. Les deux fonctions que tu cites servent à modifier la réputation d'un joueur vis à vis d'un autre joueur. La réputation est un aspect des factions. Cette modification est temporaire. Il suffit que l'un des PJ meurt et la modification s'efface. Ces fonctions ont été introduites par Bioware tardivement (je sais plus quelle version) pour justement pallier aux problème des PJ non factionnable. Mais ces fonctions ne sont pas des procédés qui permettent de factionner un PJ ( ce n'est pas la ruse). Les factions ne se rapportent pas seulement aux PNJ ! Introduire une faction dans un monde a des répercussions sur les PJ.
Ok, donc toi tu conseilles quoi pour arriver au résultat souhaité par Kawalski, concrètement ?

D'abord ça l'intéresse peut-être, mais moi aussi je suis intéressé
ah ça oui que ça m'intéresse, je ne comprend pas grand chose mais bon , ^^
donc si j'ai bien compris, je devrais insérer un objet dans l'inventaire de chaque perso qui rejoint une faction.
En fait faut créer des factions (en plus d'hostile, populace...), affecter via base de donnée une faction au PJ et enregistrer la faction vs tt les factions ajoutée.
Voila en gros le boulot pour 3 factions (3 pour montrer une subtilité et aussi parce que, à mon avis, 2 factions ca limite grandement les interactions, a part "moi voir moi taper" ;-) )
En gros:
- Créer trois factions: faction1,faction2 et faction3;

- affecter ces factions aux PNJ et créer les relations faction1/faction2, faction1/faction3/faction2/faction3 dans l'éditeur de faction;

- Enregistrer une variable laFaction = 1 (ou 2, ou 3 ) pour chaque PJ ( par ex un objet dans leur inventaire),

- Enregistrer l'état de relation du PJ avec les autres factions (faction1=100, faction2=-100, faction3=0...) dans des variables pour chaque PJ (par ex, dans un objet de leur inventaire), cette étape permet de gérer au cas par cas la faction du PJ et rendre signifiant ses actes (taper sur tel ou tel PNJ par exemple);

- A la connexion, régler pour chaque faction, la relation vis à vis du PJ (pour qu'il ai effectivement les factions qu'il faut hostile):

- Sauvegarder les changements de factions d PJ s'il fait quelque chose qui affecte cela. (Par ex, même s'il est de la faction1 neutre avec la faction3, s'il a tué un PNJ de la faction3, celle-ci est hostile pour lui, même si de manière globale la faction1 n'est pas hostile avec la faction3).


Attention, d'expérience, c'est un système dur à gérer: il faut ne pas oublier de faire des bâtons DMS et autres dispositifs pour pouvoir changer la faction facilement: un bug ou une maladresse et la faction est vite affectée: cas typique: et oui, prière est un sort hostile pour les PJ/PNJ qui ne sont pas dans le groupe en full PvP!
C'est à peu près comme l'a expliqué Lea, avec des subtilités et des méthodes d'approches différentes. Mais en gros c'est ca.

LE PROBLEME restant le nombre de variable à gérer. Pour 3 factions comme tu décris ce nombre sera égale à ((3 x 2) x 3) x Nombre de PJ. Soit 18 variables pour chaque PJ. Rajouter une quatrième et ce nombre passe à 32, et pour 5 à 50. Pour 100 factions ce nombre est de 20 000 variables.

Ce n'est pas une utopie. J'ai un système de faction pouvant aller jusqu'à 100 factions et j'ai 44 factions en service effectif.

Il faut trouver un système autre que tous les systèmes que vous connaissez pour gérer cette masse de variables. Ni conservation sur un PNJ, ni base de données, ni fichier 2da n'est adapté à cette masse d'informations.

Voila, j'espère avoir un peu éclairé le problème.
Nan mais ... vous faites exprès ?

Là vous parlez d'interactions PJs-PNJs, je me trompe ?

Et Kawalski n'a jamais parlé de PNJs, uniquement de PJs, je me trompe ?

Donc, je repose ma question : comment faire en sorte que deux groupes de PJs soit ennemis ?

s'il vous plait
Ben je vois pas comment t'expliquer autrement Taern.

Les PJ doivent faire partis de faction. Les PJ de factions amis pourront se grouper et lorsqu'ils se rencontreront d'autres PJ de factions adverses ils seront automatiquement ennemis.

Je pense que c'est parce que tu fais le distinguo entre PJ et PNJ que tu crois que ce n'est pas possible. Mais les PJ doivent être intégrer à des factions pour qu'il soit automatiquement mis en ennemi si il rencontre un PJ de faction adverse.

Je peux pas te dire plus que ca.
Voila un script dont je me servais sur mon module pour créer deux factions de PJ hostile entre elle.

Code:
///Script réalisé par Archéops
/// A placer dans OnEnter de la zone de départ. 
/// Pour un module avec deux factions differentes 
/// Chacune des faction tant hostile entre elle.... 
////////////////////////////////////////////////// 
object oPC=GetEnteringObject(); 


void main() 
{ 
    if (GetIsPC(oPC)) 
    { 
    object oPlayer=GetFirstPC(); /// on amorce la boucle 

            if (GetIsObjectValid(GetItemPossessedBy(oPC,"tag de l'objet1"))) /// Cas ou le joueur a chosit la fact1 
            { 
              while (GetIsObjectValid(oPlayer))/// debut de la boucle qui parcours tout les joueurs de la liste.. 
                { 
                  if (GetIsObjectValid(GetItemPossessedBy(oPC,"tag de l'objet2"))) 
                  { 
                  SetPCDislike(oPC,oPlayer); /// on change le comportement du joueur vis-avis des autres.. 
                  } 
                oPlayer=GetNextPC();/// on continue de parcourir la listes des joueur 
                } 
            } 
            if (GetIsObjectValid(GetItemPossessedBy(oPC,"tag de l'objet2"))) /// meme chose pour la fact2 
            { 
                while (GetIsObjectValid(oPlayer)) 
                { 
                  if(GetIsObjectValid(GetItemPossessedBy(oPC,"tag de l'objet1"))) 
                  { 
                  SetPCDislike(oPC,oPlayer); 
                  } 
                oPlayer=GetNextPC(); 
                } 
            } 
    } 
}
Le script se base sur un objet possédé par les PJs, tu devra donc faire choisir une faction a tes pjs et leur attribuer un objet celon leur choix.
Citation :
Publié par Mickey974
Ben je vois pas comment t'expliquer autrement Taern.

Les PJ doivent faire partis de faction. Les PJ de factions amis pourront se grouper et lorsqu'ils se rencontreront d'autres PJ de factions adverses ils seront automatiquement ennemis.

Je pense que c'est parce que tu fais le distinguo entre PJ et PNJ que tu crois que ce n'est pas possible. Mais les PJ doivent être intégrer à des factions pour qu'il soit automatiquement mis en ennemi si il rencontre un PJ de faction adverse.

Je peux pas te dire plus que ca.
Tu utilises bien PCLike ou PCDislike pour le faire quand meme non?
Je vais pas tarder a me pencher sur un system de faction donc si t'en a un qui marche moi ca m'interresse
Oui j'utilise les deux fonctions que tu cites, mais c'est vraiment les lignes finales. Oui j'en ai un qui fonctionne depuis 3 ans et qui est efficace. 100 factions potentielles et 44 effectives.

Mais comme je l'ai dit et je le répète, un tel système ne s'expose pas sur un forum. Des milliers de lignes de codes, c'est pas rien.

J'ai déjà expliqué en gros les principes. Le point principal étant de gérer un flux exponentielle de données. Le moteur de bioware est bâtie autour des factions. Tout est factionnable. Même le joueur est factionnable (faction_ID dans le fichier bic du personnage). Donc à mon humble avis, c'est la partie essentiel du jeu, comme je m'amuse à le dire, le coeur d'un module.

Beaucoup d'entre vous ne seront pas d'accord, mais moi je suis d'accord avec moi-même !
hum...
Tout est faction dans le jeux.
Les pieges, les portes, les coffres, les PNJs etc...
J'essayes de comprendre comment ca peut marcher avec le PCDislike et like... pour moi c'est trop primaire ca le fait pas...
Est-ce qu'on peut le jouer avec le AdjustReputationWithFaction?

EDIT :
C'est peut-etre con ce que je dis Mais on n'a pas moyen de le faire en collant dans une zone special un PNJ de chaque faction et ensuite de jouer la AdjustFactionReputation du PJ vers chacun des PNJs
Reste bien sur le pb de PJ a PJ... la je vois pas comment faire autrement qu'avec le PCDislike ou Like... Vu que le PJ ne sera pas reelement dans une faction mais aura le meme comportement que tel faction vis a vis de tel autre faction!
Citation :
Est-ce qu'on peut le jouer avec le AdjustReputationWithFaction?
Oui. Cependant toutes les fonctions sur les factions d'Aurora, n'ont qu'un effet temporaire. Cet effet par du moment ou l'on exécute la fonction, à soit la mort du PJ, soit le reboot du server.

Citation :
C'est peut-etre con ce que je dis Mais on n'a pas moyen de le faire en collant dans une zone special un PNJ de chaque faction et ensuite de jouer la AdjustFactionReputation du PJ vers chacun des PNJs
Reste bien sur le pb de PJ a PJ... la je vois pas comment faire autrement qu'avec le PCDislike ou Like... Vu que le PJ ne sera pas réellement dans une faction mais aura le meme comportement que tel faction vis a vis de tel autre faction!
Si. C'est bien sur, une partie de la manière d'aborder le problème. Je conseille plutôt des objets inertes (chaise, table, ou autre sauf objet invisible) que des créatures.

Je vais essayer de rester sur le PJ/PJ mais tu dois bien comprendre que les factions sont un système global. Je crois (j'en mettrai pas ma main à couper mais ...) que si il y a si peu de système de faction (même pas du tout), c'est parce que tout le monde se pose le problème comme tu viens de le poser.

PJ vs PJ. OK ! Mais c'est 1% de l'aspect des factions. Or on ne peut pas comprendre les factions en scrutant ces 1%.

Le PJA que tu veux opposer au PJB DOIT faire partie d'une faction (il faut arriver à simuler cet état). On dit que les PJ ne sont pas factionnables. Tout le monde est a peu près d'accord la dessus, mais on doit simuler cet état. Si admettons tu utilises les deux fonctions citées ci-dessus, certes, tu aura l'effet escompté. Mais comme je te le disais plus haut, cet effet sur la ligne temporelle aura un début et surtout une fin (de toute manière pour le PJvsPJ ca sera toujours vrai et il faudra rafraîchir les relations à la mort d'un PJ). Si lors de la fin, tu ne sais pas conserver l'antériorité de la relation factionnelle, tu ne pourra pas faire en sorte que cette relation perdure. C'est la dessus qu'il faut travailler et non PJ vs PJ, qui se résume au 2 fonctions que tu cites.
Répondre

Connectés sur ce fil

 
1 connecté (0 membre et 1 invité) Afficher la liste détaillée des connectés