La Bibliothèque de Neverwinter Nights
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
Aide et informations diverses sur Neverwinter Nights ainsi que D&D3.
FAQ
Rechercher
Liste des Membres
Groupes d'utilisateurs
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
S'enregistrer Se connecter pour vérifier ses messages privés Connexion
La date/heure actuelle est 27/11/2024 05:22:17
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Voir le sujet précédent ¤ Voir le sujet suivant | |
---|---|
Auteur | Message |
Hawkai Chevalier Messages: 91 Localisation: Bourgogne |
Euh ... pardon d'avance si la question a déja été abordé.
Mais quelqu'un s'est-il déja penché sur le problème de la gestion des stratégies de combats de PNJ des monstres des henchmans .... enfin bref de n'importe quel personnage géré par l'IA ?? En particulier la gestion des sorts parcque c'est quand même un peu n'importe quoi. Serait-il possible par exemple on commence par simple : Eviter les abbération du genre lancement d'arrêt du temps dans un arret du temps ? --> là c'est le jeu qui merde un peu ... normalement dans un arret du temps on ne peut pas en lancer un autre et normalement on ne peut pas attaquer non plus mais seulement lancers des sort, se déplacer ou ramasser des objets non tenus) Plus compliqué ... éviter les abbération du genre : je m'obstine à lancer 15 fois le même sort alors que de toute évidence il n'a aucun effet. --> le mage lance une boule de feu sur un dragon rouge : dégâts = 0, normal ... bon une fois que le mage à lancer son sort et qu'il apparait clairement que ca ne servira à rien de lancer le même est-il possible de le pousser à tester autre chose jusqu'à ce qu'il trouve un sort efficace ? Dans le même genre si il semble impossible de passer une RM trop élevé ... changer de stratégie et frapper, fuire ou lancer des sort d'aide au groupe plutôt que des sorts offensifs. Encore plus compliqué ... Bah ... un mago c'est quand même sensé pas etre trop con et être une bibliothèque ambulante. Alors l'idéal serait qu'il lance directement les bon sort sur les bonnes créatures : par exemple ... il est de notoriété publique que TOUS les dragon sont immuniés à quelque chose en général l'élément qui correspond à leur souffle. alors pas la peine de lancer boule de feu sur un rouge, ni éclair en série sur un bleu !! le mage devrait savoir que ca ne fera rien. Dans le même ordre d'idée les morts vivants sont immunisés aux effets mentaux, au coups critiques, certains sont immunisés au froid mais TOUS ... sont normalement immunisés aux effets basés sur la constitution (puisque normallement ils n'ont pas de valeur de constit étant morts-vivants). Cela inclu donc le poison, les maladies et surtout la totalité des sorts de mort ou à peu de chose près ... alors inutile de s'escrimer à lancer des sort de morts sur des Undead ... mieux vaut tenter le registre des sort de lumière ou d'energie positive. Voilà si qq'un a des scripts tout faits pour remplacer la gestion des sorts par l'IA standard je suis prenneur parcque c'est quand même vraiment mal foutu et je n'ai pas encore le niveau pour m'attaquer à ça. Merci d'avance. _________________ Enter Fully of your own will and leave some of the happiness you bring. |
Revenir en haut | |
edisnotdead Grand Chevalier Messages: 132 |
bon c est pas vraiment une ia que tu demande le sujet a été abordé y a meme pas une semaine mais ca fais rien ^^
dejas on vat commencé par l ia ce que c est ^^ car je bosse sur une ia ensor mais pas programation d action ^^ une ia c est fair une action en tiré des lecon et proposé une autre solution si l action n etait pas optimale en gros il balance cone de feu sur un dragon rouge le dragon se marre biensure lui il stoque des donné qui dise en gros dragon rouge cone de feu = pas bon en (simplifiant biensure ) dans ce cas la prochaine fois il adopetra une autre technique exemple boule electrique et il mettra dragon de feu boule electrique = bon =nombre de degat mais la on parle d un jeteur d ensor d attaque y a aussi le jetteur de sort de protection qui lui observe les autre et en tire des lecon et celui attaque avec defense donc si tu l as compris le but de cette manip et que l ensort aprenne tous seul passons a la programation d action reaction dans ce qu as tu lui mettra toute les donné que tu veu et si il se retrouve dans un cas que tu lui a proposé il executera l action prealablement defini le mieu donc c est de mixé les deux et de donné une priorité l une sur l autre donc l iné et l acquis donc en se moment je programme la parti 1 l ia (acquis)sachant qu elle devra pouvoir modifier l iné et en plus rajouté des données mais j essaye de la rendre la moin lourde possible donc un peu de patience ^^ ou d aide au choix ^^ les probleme qui se pose la recursivité de donné le trop grand nombre de données au bou d un moment ( donc la gestion rapide de ses données ) voili voila edit: rectification on en a parlé sur un autre forum ^^ http://www.deepblack.be/forum/viewtopic.php?t=726 |
Revenir en haut | |
Harmelyo Chevalier Messages: 84 |
Bon je dois dire que je m'étais déjà posé cette question plusieurs fois, j'avais jeter un oeil dans les scripts de comportement sans trop trouver mon bonheur. Bref si jamais tu montes quelque chose, je serais très heureux de pouvoir y jeter un oeil, au moins pour comprendre les bases de ton raisonnement (et surtout leur application).
*se souvient il y a pas longtemps d'avoir croiser un ensorceleur pnj de lvl 20 qui se jetait cape/manteau majeur en boucle avant de s'arreter ayant épuisé tout ses sorts de lvl 8,9* et bon courage à toi |
Revenir en haut | |
Hawkai Chevalier Messages: 91 Localisation: Bourgogne |
... Lol ... voilà c'est axactement à ce genre de comportement que je fait allusion.
Personellement j'ai trouvé un moyen d'y remédié quand j'ai crée les monstres de mon XP mod. En fait il faut créer la liste de sort avec soins et éviter les séries de sort genre bon je lui met 5 arret du temps c'est le sort le plus puissant, ou 5 éclair en série et rien d'autre. Le fait de diversifier la liste de sort à tendance à rendre son utilisation plus cohérente ... mais c'est encore loin d'être parfait et ca demande un temps fou pour bien faire la liste de sort du personnage ou du monstre. _________________ Enter Fully of your own will and leave some of the happiness you bring. |
Revenir en haut | |
Harmelyo Chevalier Messages: 84 |
Je m'étais aussi résolu à cette pratique "du pauvre" mais cela fonctionne dans la mesure où les personnages n'atteignent pas des niveaux trop élevé et des personnages sans matériels à immunité (genre un petit malin qui obtient une immu isaac ou même une résistance à la magie du genre 10/-.)
Cette solution ne me satisfaisait plus pour des pnj de haut niveaux... (j'ai eu la joie de faire une expérience tordante en joueur la dessus... armada avec un ami de bon niveau, nous avons été chassé la liche, elles ont spawné par paquet de 10... Le module a été timestop-iser pendant plus d'une minute un soir de grande affluence ) |
Revenir en haut | |
Hawkai Chevalier Messages: 91 Localisation: Bourgogne |
Ca c'est clair ... par pitié n'abusez pas du timestop ... surtout si c'est pour ne rien en faire !!
(bon je dit ca mais dans mon arène les dracosire en ont tous un et le début du combat est assez chiant ... mais bon en même temsp c'est normal pour des great wyrm !! et puis la plupart n'en ont qu'un justement pour qu'il serve à autre chose que lancer des arrets du temps) _________________ Enter Fully of your own will and leave some of the happiness you bring. |
Revenir en haut | |
Noon Héros Messages: 272 Localisation: Entre Vannes et les RO |
C'est pour ça que je ne met presque jamais d'ensorceleurs PNJ mais plutôt des magiciens.
J'avais trouvé un set de script d'IA sur le Vault: "Jasperre AI" mais j'ai jamais eu le courage de l'essayer, mais d'après le readme ça devrait t'intéresser. _________________ Beshaba me protège, Tymora guide mes tirs. The Cake is a lie ! Mes modules NwN2:De Vieilles Rencontres! et De Vieilles Rencontres2 Double Avenir sur le Nwvault |
Revenir en haut | |
Harmelyo Chevalier Messages: 84 |
je jetterais un oeil la dessus merci!
*message subliminal* les ensorceleurs c'est nul vive les mages! |
Revenir en haut | |
edisnotdead Grand Chevalier Messages: 132 |
les raisonement sont assez simple en faite ^^ stoker les resultat sur ne base de donné plus exactement une par classe et surtout ne pas avoir d ia generique mais bien une par classe
les probleme: toujours la recursivité du a la bdd mais encore ca ya moyen ^^ les accés a la bdd (accés au disque souvent pendant un combat ) possibilité de le géré par un timer explication: toute les ia seront chargé au debut du chargement du module sur un placeable ensuite elle seront chargé a l aide d un timer que je ne citerait plus a divers moment de la journé alors vous me direz il faudra attendre qu elles soient mise a jour pour qu il ne repete pas la meme erreur??^^ et bien non ^^ car je procede par esprit collectif (si on peut apellé ca comme ca)qui lui est percistant et esprit individuelle qui lui ne l est pas l esprit individuelle prone toujours sur le percistant mais tant que la variable de l individuelle est a zero il vat pioché dans le percistant ce qui devrai reduire encore plus les accés base de donné sur placeable et avoir des comportement différent par jeteur de sort guerrier ou autres. autres avantages les nouveau pnj profite tous de l experience des autres par le biai de l esprit collectif ensuite y a les multiclassage la c est plus chaud et franchement ja n y ai pas vraiment encore pensé voili voilou je pense que ca, peut s appellé AI ^^ car normalement si tous se passe bien elle devrai s adapter au niveau des pj |
Revenir en haut | |
lylver Héros Messages: 274 |
Avant de vous lancer dans un système complexe, vous avez déjà à disposition un certains nombres d'outils scripts pour orienter l'IA
a) pour les sorts variables locales à mettre sur le monstre X2_L_BEH_OFFENSE : agressivité (sorts défensifs/offensifs) X2_L_BEH_MAGIC : taux d'utilisation de la magie (100 => épuise tous ses sorts avant de faire autre chose X2_L_BEH_COMPASSION : incante des sorts sur les membres de sa faction pour aider : buff/sorts de dissipation/sorts de soins il y en a encore un que j'utilise peu pour que les choix de sorts soient plus aléatoires. b) comportement général X2_L_SPAWN_USE_AMBIENT_IMMOBILE : animation mais reste proche du point de spawn X2_L_SPAWN_USE_AMBIENT : animation et bouge X2_L_SPAWN_USE_SEARCH : active le mode recherche par défaut X2_L_SPAWN_USE_STEALTH : active le mode furtif par défaut (pénible avec certaines conditions de spawn) c) Tactiques de combat Code : // **** Special Combat Tactics *****// // * These are special flags that can be set on creatures to // * make them follow certain specialized combat tactics. // * NOTE: ONLY ONE OF THESE SHOULD BE SET ON A SINGLE CREATURE. // * Ranged attacker // * Will attempt to stay at ranged distance from their // * target. // SetCombatCondition(X0_COMBAT_FLAG_RANGED); // conseil : à éviter en espace clos // * Defensive attacker // * Will use defensive combat feats and parry // SetCombatCondition(X0_COMBAT_FLAG_DEFENSIVE); // gardes (utilise à bonne escient expertise) // * Ambusher // * Will go stealthy/invisible and attack, then // * run away and try to go stealthy again before // * attacking anew. // SetCombatCondition(X0_COMBAT_FLAG_AMBUSHER); // délirant avec ma série de gobelins "custom" // * Cowardly // * Cowardly creatures will attempt to flee // * attackers. // SetCombatCondition(X0_COMBAT_FLAG_COWARDLY); // la population en général. d) un bout de code pour des "buffs" personnalisés : l'incantation est instantanée au spawn NWScript : /* C */ SetSpawnInCondition(NW_FLAG_FAST_BUFF_ENEMY); TalentAdvancedBuff(20.0); if( GetHasSpell(SPELL_BULLS_STRENGTH) > 0 ) ActionCastSpellAtObject(SPELL_BULLS_STRENGTH, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_ENDURANCE) > 0 ) ActionCastSpellAtObject(SPELL_ENDURANCE, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_DIVINE_FAVOR) > 0 ) ActionCastSpellAtObject(SPELL_DIVINE_FAVOR, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_AID) > 0 ) ActionCastSpellAtObject(SPELL_AID, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_DARKFIRE) > 0 ) ActionCastSpellAtObject(SPELL_DARKFIRE, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_ENTROPIC_SHIELD) > 0 ) ActionCastSpellAtObject(SPELL_ENTROPIC_SHIELD, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_CLARITY) > 0 ) ActionCastSpellAtObject(SPELL_CLARITY, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_SHIELD) > 0 ) ActionCastSpellAtObject(SPELL_SHIELD, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; if( GetHasSpell(SPELL_HASTE) > 0 ) ActionCastSpellAtObject(SPELL_HASTE, OBJECT_SELF, METAMAGIC_ANY, FALSE, 0, PROJECTILE_PATH_TYPE_DEFAULT, TRUE) ; |
Revenir en haut | |
AZAZEL11 Seigneur Messages: 156 |
Wow, tout cela semble merveilleux. Tu pourrais nous dire où ce script doit aller? Pour ma part je n'ai jamais eu encore à modifier quoi que ce soit pour les scripts de pnjs. Mais à voir ceci je sens que ça va venir lol.
_________________ L'imagination est plus importante que le savoir. (Albert Einstein) |
Revenir en haut | |
Harmelyo Chevalier Messages: 84 |
tu peux mettre le gros morceaux dans le onperceveid, ou tout evenement se déclenchant avant le combat.
Toutefois cela n'offre pas le plus petit bout de solution au problème posé au début. Mais au moins, nous savons comment buffer nos jeteurs de sorts à présent . Les comportements se trouvent dans un des scripts que l'on définit sur chaque créature (pas très clair mais j'ai pas aurora sous la main). |
Revenir en haut | |
AZAZEL11 Seigneur Messages: 156 |
Merci, c'est logique dans le OnPerceive...
Il me semble que par défaut le pnj lanceur de sorts commence toujours par faire tout ses sorts les plus forts...en commencant par le niveau le plus élevé pas vrai? J'ai vu souvent il me semble un mage se lancer 4 manteaux supérieurs des sorts consécutifs.... Hawkai, moi aussi je trouvais absolument stupide certains sorts incantés en boucle par le pnj. Une solution que j'avais trouvé (bien que réglant le problème à moitié) est d'y mettre des sorts qu'une seule fois en mémoire du pnj. De plus, j'y ai mis que des sorts globaux (main de bigby, cape, conjuration, etc..) cela à pour effet qu'au moins le pnj mage/enso/prêtre est tout autant redoutable pour tout le monde quelque soit sa classe/race. Une solution efficace bien que très paresseuse lol! Mais je suis surement pas le seul à faire ceci! _________________ L'imagination est plus importante que le savoir. (Albert Einstein) |
Revenir en haut | |
Hawkai Chevalier Messages: 91 Localisation: Bourgogne |
Non c'est évident que ca reste une bonne solution ... après tout autant mettre quelques sort de beouf et laisser le reste en évocation ou en sorts offensif.
Bien sur ca ne résous pas le problème des sorts inefficaces mais e,lève déja quelques conneries. _________________ Enter Fully of your own will and leave some of the happiness you bring. |
Revenir en haut | |
lylver Héros Messages: 274 |
Arf, je pensais c'étais évident.
Tous ces réglages sont à mettre dans les scripts de spawns, je vous conseille de vous construire des "briques" à partir de nw_c2_default9 car vous économiserez ainsi de la place : NWScript :
//:: //// //:: Brique 0 : onspawn_generic.nss //:: optimization taille des scripts de spawn par Lylver #include "NW_I0_GENERIC" void main() { // DEFAULT GENERIC BEHAVIOR (DO NOT TOUCH) ****************************** ****************************** ***************************** SetListeningPatterns(); // Goes through and sets up which shouts the NPC will listen to. WalkWayPoints(); // Optional Parameter: void WalkWayPoints(int nRun = FALSE, float fPause = 1.0) // 1. Looks to see if any Way Points in the module have the tag "WP_" + NPC TAG + "_0X", if so walk them // 2. If the tag of the Way Point is "POST_" + NPC TAG the creature will return this way point after // combat. } NWScript :
//:: // //:: Brique 1 : onspawn_generic.nss //:: optimization taille des scripts de spawn par Lylver #include "x0_i0_treasure" void main() { //* Create a small amount of treasure on the creature if ((GetLocalInt(GetModule(), "X2_L_NOTREASURE") == FALSE) && (GetLocalInt(OBJECT_SELF, "X2_L_NOTREASURE") == FALSE) ) { CTG_GenerateNPCTreasure(TREASURE_TYPE_MONSTER, OBJECT_SELF); } } NWScript :
//:: //// //:: 1er exemple de script "custom" //:: onspawn_static.nss //:: optimization taille des scripts de spawn par Lylver //:: //:///////////////////////// //////////////////////// //:: NW_C2_DEFAULT9 //:///////////////////////// //////////////////////// //:: Copyright (c) 2002 Floodgate Entertainment //:: Created By: Naomi Novik //:: Created On: 12/11/2002 //:///////////////////////// //////////////////////// //:: Updated 2003-08-20 Georg Zoeller: Added check for variables to active spawn in conditions without changing the spawnscript #include "x0_i0_anims" // #include "x0_i0_walkway" - in x0_i0_anims #include "x2_inc_switches" void main() { // ***** Spawn-In Conditions ***** // // * This NPC will attack when its allies call for help // * SetSpawnInCondition(NW_FLAG_SHOUT_ATTACK_MY_TARGET); // **** Animation Conditions **** // // * These are extra conditions you can put on creatures with ambient // * animations. // **** Special Combat Tactics *****// // * These are special flags that can be set on creatures to // * make them follow certain specialized combat tactics. // * NOTE: ONLY ONE OF THESE SHOULD BE SET ON A SINGLE CREATURE. // **** Escape Commands ***** // // * NOTE: ONLY ONE OF THE FOLLOWING SHOULD EVER BE SET AT ONE TIME. // * NOTE2: Not clear that these actually work. -- NN // ***** CUSTOM USER DEFINED EVENTS ***** / // These user-defined events are in the range 1001-1007. /* 0 */ ExecuteScript("onspawn_generic",OBJECT_SELF); /* 1 */ ExecuteScript("onspawn_treasure",OBJECT_SELF); // ***** ADD ANY SPECIAL ON-SPAWN CODE HERE ***** // // * If Incorporeal, apply changes if (GetCreatureFlag(OBJECT_SELF, CREATURE_VAR_IS_INCORPOREAL) == TRUE) { effect eConceal = EffectConcealment(50, MISS_CHANCE_TYPE_NORMAL); eConceal = ExtraordinaryEffect(eConceal); effect eGhost = EffectCutsceneGhost(); eGhost = ExtraordinaryEffect(eGhost); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eConceal, OBJECT_SELF); ApplyEffectToObject(DURATION_TYPE_PERMANENT, eGhost, OBJECT_SELF); } } Brique 0 et Brique 1 prennent beaucoup de place une fois compilés : ne trainez pas cela comme des boulets pour votre module si vous devez faire plusieurs scripts onspawn : économie d'environ 130ko (d'après mon souvenir) à chaque fois |
Revenir en haut | |
L'Erudit Seigneur Messages: 167 |
J'ai rien compris à ton histoire de briques !
Adrien, décidément pas maçon pour un sou. |
Revenir en haut | |
lylver Héros Messages: 274 |
NWScript :
/* 0 */ ExecuteScript("onspawn_generic",OBJECT_SELF); /* 1 */ ExecuteScript("onspawn_treasure",OBJECT_SELF); // ***** ADD ANY SPECIAL ON-SPAWN CODE HERE ***** // Brique(s) logicielle : éléments, programmes, logiciels dont l'assemblage fournit une fonction évoluée. |
Revenir en haut | |
La Bibliothèque de Neverwinter Nights Index du Forum »
La Bibliothèque Binaire du NWScript - Neverwinter Nights
Page 1 sur 1 ¤
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum