[Module de Base] Système de scripts complet pour module persistant ou semi-persistant

Répondre
Partager Rechercher
Bonjour, avant de poser ma question, je tiens dans un premier temps à remercier Delphinea/NekCheitan pour avoir mis à disposition leur système de module.

C'est la première fois que je trouve un module de base tout en un qui peut rendre de sacré service. Et par la même occasion permettre de mettre en ligne un module plus que respectable sans pour autant être une bête en système de persistance.

Après avoir lu ce post et les indications présentes dans le module, j'ai encore une ou deux difficulté pour mettre en oeuvre le système de durabilité des Armes et armures.

Si j'ai bien compris, si j'utilise les armes et armures définie dans l'éditeur, le système les considères comme des armures et armures de bases.

Si je veux les rendre plus spécifique je dois les éditer et mettre en resref les coordonnée suivant votre système de caractéristique.

Puis viens le moment de les remettre en bon état. Et c'est là que je coince.
Comment je dois faire ??

J'ai mis une enclume, pris un marteau. Placé une armure ( puis une épée ) sur l'enclume ( alias dans l'inventaire de l'objet) et là ... rien. Pas d'arbre à dialogue ( sauf si je n'avais pas de marteau). Ah oui, j'oubliai l'armure et l'épée étaient des modèle de base, n'ayant fait aucun combat.

C'est là que j'vois pas où j'ai commis une erreur.

Pourriez vous ne donner un complément d'information. Merci d'avance.
Salut,

Pour le système de durabilité, il n'est plus nécessaire de donner un resref ou un tag spécifique à l'objet (ça reste valable néanmoins). Il suffit d'attribuer une variable locale à l'objet (de type "integer" ayant comme nom: Dur) à laquelle tu attribues une valeur de durabilité (comprise entre 10 et 100 le plus souvent).
Pour l'enclume, il suffit de placer l'objet dedans, d'équiper le marteau de forgeron, et ensuite taper sur l'enclume. Si tu réussis à faire 1 point de dégat, un jet de compétence sera effectué, et s'il est réussi, l'objet sera réparé.
Le module étant déjà ancien, je ne sais pas si il est vraiment à jour, mais si quelque chose te semblait bizarre, n'hésite pas à m'en faire part.
Mise à jour du module de base avec le système d'artisanat qui va avec, pour les motivés qui voudraient encore créer un module NWN1 sans piocher des systèmes incompatibles sur le Vault et faire une soupe avec

PS: Ou pour les anglophobes c'est valable aussi

PSS: Je fournis une assistance/débuggage/mise à jour de tout module utilisant le système (enfin pas trop quand même, il y en a déjà plusieurs qui me bouffent mon temps )
J'ai un probleme avec le script de spawn: seul les créatures/PNJ dont le tag se termine par U1 apparaissent, pourtant, logiquement (si j'ai bien compris), une creature ayant pour Tag "SWhgluna" devrait apparaître la ou je place un WP nommé dont le Tag est "WPVP_SWhgluna"? je me trompe quelque part?

Je n'ai pas saisi la fonction des WP dont le Tag commence par "POST_"; dans quel cas doit on s'en servir?

Edit
Code PHP:

//******************************
 //*  On_Enter_Area Valprofond  *
 //******************************
 //*   Scripteur: Nek Cheitan   *
 //******************************
 // Script Spawner a placer dans le OnEnter de la zone
 // Fait Spawn toutes les creatures disposant du debut de Tag "SW"
 // Soit a leur POST_ si un tel WP existe
 // Soit a un WP cree au prealable de type WPVP_ + TAG (ex: WPVP_SWFERMIERU1)
 // Dans le cadre de PNJ Unique, la fin du TAG portera le prefixe U1
 // (ex: SWALAINU1 pour un RESREF: alain)
 
 //  -sVP 1.66
 //  14/04/06
 
 #include "jfv_includes"
 #include "nw_i0_generic"
 
 
void main()
 {
  
object oArea OBJECT_SELF;
  
object oPC GetEnteringObject();
  
string sTag GetTag(oArea);
 
  if(
GetIsPJ(oPC))
  {
   
SendMessageToPC(oPC"Vous entrez dans: "+GetName(oArea));
 
   
//Sauvegarde du PJ
    
DelayCommand(5.0StorePJ(oPC));
 
   
//Debut Respawn Script
   //
   
object oWP GetFirstObjectInArea(oArea);
   
//Tant que l'objet est valide et est un WP
   
while(GetIsObjectValid(oWP))
   {
    if(
GetObjectType(oWP) == OBJECT_TYPE_WAYPOINT)
    {
    
string sTag GetTag(oWP);
    
string sPost GetStringLeft(sTag7);
    
//Si le WP est nomenclature Respawn Valprofond (Type POST ou normal)
    
if(sPost == "POST_SW" || sPost == "WPVP_SW" || sPost == "NIGHT_SW")
    {
     
string sUnique GetStringRight(sTag2);
     
int nLong GetStringLength(sTag);
     
string sTemplate;
     
location lLoc;
     
object oClone;
     if(
sUnique == "U1")
     {
      
sTemplate GetSubString(sTag7, (nLong-9));
      
oClone GetNearestObjectByTag("SW" sTemplate "U1"oWP);
      if(!
GetIsObjectValid(oClone))
      {
       
lLoc GetLocation(oWP);
       
object oPNJ CreateObject(OBJECT_TYPE_CREATUREsTemplatelLoc);
       
//AssignCommand(oPNJ, TurnToFaceObject(oWP, oPNJ));
      
}
     }
    }
    }
    
oWP GetNextObjectInArea(oArea);
   }
  }
   
//Fin Respawn Script
 

Les scripts ne sont pas mon domaine, et je ne voudrais pas m'avancer, mais en lisant celui ci je me demande s'il ne manque
pas quelque chose pour les PNJ ayant pour Tag "SWexemple" car les lignes de "créature" (désolé pour ce vocabulaire de noob ) ne semblent faire référence qu'aux PNJ ayant pour tag "SWexempleU1".

Mon problème pourrait il venir de la?
Le placement des créatures non-uniques a été retiré dans la nouvelle version du script, pour la simple raison qu'il était plus simple d'utiliser les rencontres Bioware avec un temps de respawn minimal.
Dans mes scripts, j'essaie toujours d'utiliser au maximum les possibilités offertes par le jeu, ce qui évite d'alourdir le module par des systèmes complexes ou superflus.

Les WP de type POST_ et NIGHT_ sont des WP servant à fixer un PNJ ou une créature à un endroit spécifique (comme un poste de garde) de jour pour le premier, et de nuit pour le second. Le PNJ passant d'un WP à l'autre dès que le cycle change (C'est une fonction de base du jeu, je n'ai rien inventé ).
A l'inverse, WPVP_SW sert à placer un WP où apparaitra le PNJ, mais où ce dernier pourra effectuer un déplacement ou des animations (en correspondance avec la configuration du script nw_c2_default9 présent sur le module de base).
Pourrais tu nous confier la partie "manquante" de ce script? Et que me conseilles tu? utiliser ce script? ou le système de Bioware? (est ce celui proposé par Prince Nexus? je vais essayer de retrouver le lien).

Sans cette partie "manquante" le script utiliser sur le On_Leave de la zone détruit il quand meme tous les PNJ?
Il n'y a pas de partie de script "manquante", c'est juste que la version actuelle n'utilise plus cette option.
Les rencontres Bioware sont celles proposées dans l'éditeur (trigger violet classique).

La fonction de nettoyage de zone efface tous les PNJ et les créatures, sauf les PNJ "plot/intrigue", mais ça peut être modifié au besoin (comme beaucoup d'autres options d'ailleurs, suffit de demander ).
J'utilise le système Valprofond pour mon mod et je le trouve vraiment terrible.

J'ai une question concernant justement cette partie du script sur les waypoints PNJs.

Est-il possible de mettre les WP de type "POST" pour le jour ET le Nuit, et garder les WP "NIGHT" pour la nuit ?

Quelles parties de tes scripts doit-on modifier ?
POST_ est le préfixe pour un WP de jour, et NIGHT_ pour un WP de nuit.

Si tu ne mets pas de WP NIGHT_ le PNJ restera sur le POST_ de jour comme de nuit. C'est ça que tu voulais savoir ?
Citation :
Si tu ne mets pas de WP NIGHT_ le PNJ restera sur le POST_ de jour comme de nuit. C'est ça que tu voulais savoir ?
Oui, merci.

Juste pour expliquer ma précédente question, dans la première version que j'utilisais avec les WP de type "WPVP_", mes PNJs disparaissaient la nuit. Je pensais qu'avec ta nouvelle version "1.66" les WP de type "POST_" faisaient de même car je n'ai pas encore testé mon mod de nuit.

Bon je vais essayer de configurer ces triggers alors ^^ Mais pour les PNJ de type garde a qui l'on veut donner un positionnement spécifique (un angle particulier par exemple), peut on utiliser ce système de triggers ou mieux vaut le garder pourles PNJ types citadins, monstres errants etc?
Prenons l'exemple d'un groupe de 4 habitants d'une ville que tu veux faire apparaitre autour d'une place située au centre d'une zone.

- Tu crées 4 PNJ possédant les resref: habitant1, habitant2, habitant3, habitant4.
- Dans le menu en haut à droite, tu clic sur "Peindre les rencontres" (les 2 épées croisées), ensuite tu sélectionnes "Personnalisé".
- Tu clic droit sur "2.Normales" et tu sélectionnes "Nouveau", ensuite tu clic sur "Suivant".
- Dans le menu de gauche de la fenêtre qui vient de s'ouvrir, dans l'onglet "Personnalisé", tu vas sélectionner ton premier PNJ et cliquer sur la petite flèche -> afin de le placer dans la liste des créatures de la fenêtre de droite. Répète cette opération pour chacun de tes PNJ. Clic sur "Suivant" une fois tous tes PNJ assignés à la liste (1).
- Dans la fenêtre suivante, donne un nom à ta rencontre, sélectionnes "Ouvrir la fenêtre des propriétés", et clic sur terminer.
- Dans l'onglet "Base":
-le menu déroulant "Difficulté": influence le FP de la rencontre vis à vis du FP du délencheur. Plus la difficulté est haute, plus le FP de rencontre sera élevé.
-le menu déroulant "Option de Spawn": Indique si la rencontre est à usage unique ou répétitif.
- Dans l'onglet "Avancé":
-le menu déroulant "Faction": toujours sélectionner "Hostile". Cela n'affecte en rien la faction des créatures de la rencontre.
-la case "Réactiver rencontre" ne s'active que si l'option "Continu" a été sélectionnée dans l'onglet "Base". La cocher permet de définir un délai et un nombre de respawn
-la case "Activation par un joueur" permet d'empêcher une créature ou un PNJ de déclencher la rencontre.
- Une fois ta rencontre créée, tu sélectionnes cette rencontre et tu traces un trigger sur ta zone, et d'un clic droit tu places les différents points de respawn de ta rencontre (flèche verticale violette (2)).

- Si tu veux qu'un PNJ effectue une ronde, tu peux lui assigner des WP appropriés: WP_habitant1_01, WP_habitant1_02, etc... ou WN_habitant1_01 durant la nuit.
- Si tu veux qu'un PNJ se positionne à un endroit fixe (marchand, garde, etc), tu peux lui assigner un WP de type POST_: POST_habitant1 ou NIGHT_habitant1 durant la nuit (3)
- Si tu veux que tes PNJ effectuent des animations (comme discuter entre eux, se saluer, etc)... tu peux configurer les constantes dans leur script OnSpawn respectif (ou utiliser le script nw_c2_default9 du Système de Base VP qui le fait tout seul).

(1) Le jeu fera respawn les créatures en fonction du FP du déclencheur de la rencontre et de la difficulté réglée dans l'onglet "Base". Mettre des créatures d'un FP identique permet d'avoir un choix égal entre toutes les créatures de la liste.
(2) Le jeu fera respawn les créatures sur la flèche la plus éloignée du déclencheur de la rencontre. Placer une flèche à l'opposé de chaque point d'entrée présumé du trigger permet de varier les points d'apparition tout en évitant l'effet d'apparition instantanée.
(3) Le PNJ fera toujours face à la pointe de son WP. Si il regardait malgré tout vers l'Est, il est possible d'assigner une variable locale au WP afin de le forcer à le faire: (variable: X2_L_WAYPOINT_SETFACING , type integer, valeur 1).


PS: Croyez pas que je vais pondre des tutos du genre tous les jours, c'est bien parce que vous utilisez le système VP
Content
Citation :
Publié par Nek
PS: Croyez pas que je vais pondre des tutos du genre tous les jours, c'est bien parce que vous utilisez le système VP
Zut moi qui croyait que c'était le cas...

Oups il fallait pas le dire

Merci quand même des informations, ca aide toujours

Amitiés.
Bon dans ce cas une derniere précision ^^: Lorsque que l'on place des creatures ayant des Tag se terminant par U1 avec des WP correspondant etc, les creatures evoquées doivent etre uniques sur le serveur ou dans la zone?
Uniques sur le module. Bien que le système n'empêche pas le placement de plusieurs WP identiques.
Le PNJ qui apparaitra sera celui dont la zone aura été explorée la première et où les PJ seront toujours présents ou à peine partis. Je donne un exemple:

- Tu crées un PNJ portant le Tag: SWhumystereU1 (et le resref: humystere)
- Tu places un WP dans une taverne portant le Tag: POST_SWhumystereU1
- Tu places un autre WP dans un temple portant le même Tag.
Si des PJ entrent dans le temple alors qu'aucun PJ n'est dans la taverne, le PNJ mystere apparaitra dans le temple. Si les PJ quittent le temple et que d'autres (ou les mêmes PJ) entrent ensuite dans la taverne (avec au moins 60 secondes de délai entre 2), le PNJ mystere apparaitra dans la taverne
En jouant avec les délais et les WP, il est possible de donner des effets sympas pour des quêtes ou des poursuites
Bonjour c'est encore moi, j'aurais besoin d'une précision quant au système de réputation:

Citation :
(Ne pas oublier de créer un PNJ CR 200 avec le TAG "Faction_XX")
Doit on créer un PNJ pour chaque faction? Pour les factions de base aussi?

J'ai crée plusieurs de ces PNJ, mais quand je tue une créature je reçois le message "votre réputation s'est détériorée vis à vis de vieux dragon rouge" lol. Peut on m'expliquer cette étrangeté ? ^^.

J'ai aussi un problème du pont de vu du système d'xp, j'ai beau changer toutes les paramètres du script jfv_in_constant lorsqu'un PJ tue un PNJ il ne gagne aucune xp, pouvez vous la aussi m'aiguiller?

Merci a vous
Thumbs up
Hello,

N'ayant pas les extensions je n'ai pas pu ouvrir le module de base VP que tu proposes en début de topic.

C'était au sujet de la durabilité des objets que j'étais curieux :

Plus j'utilise mon arme plus elle s'use. On peut scripter ça sur le OnPhysicalAttacked ou le OnDamaged des Créatures ou Plaçables pour faire perdre des points de durabilité au GetLastWeaponUsed. Mais pour les combats entre PJ, on peut faire comment ?
Bonjour bonjour

Citation :
Doit on créer un PNJ pour chaque faction? Pour les factions de base aussi?
Pour n'importe quelle faction si tu veux que les relations entre le PJ et elle soient persistantes.

Citation :
J'ai crée plusieurs de ces PNJ, mais quand je tue une créature je reçois le message "votre réputation s'est détériorée vis à vis de vieux dragon rouge" lol. Peut on m'expliquer cette étrangeté ? ^^.
Le fait de créer un PNJ CR200 était peut-être trop bas, mets lui un CR de 999, ou en tout cas plus haut que celui de tes monstres les plus puissants ^^
Le but est que le PNJ portant le nom de la faction possède le CR le plus élevé, afin d'être identifié par le script comme étant "la créature la plus puissante de la faction", et donc de voir son nom affiché
Si tu crées un PNJ CR999 avec comme nom: "s bandits de la route écarlate", tu auras comme phrase: "votre réputation s'est détériorée vis à vis des bandits de la route écarlate"

Citation :
J'ai aussi un problème du pont de vu du système d'xp, j'ai beau changer toutes les paramètres du script jfv_in_constant lorsqu'un PJ tue un PNJ il ne gagne aucune xp, pouvez vous la aussi m'aiguiller?
En effet, le script d'xp étant un script d'event OnDeath de CREATURE (nw_c2_default7), il ne fonctionne que pour les monstres et les PNJ, pas pour les PJ

Citation :
Plus j'utilise mon arme plus elle s'use. On peut scripter ça sur le OnPhysicalAttacked ou le OnDamaged des Créatures ou Plaçables pour faire perdre des points de durabilité au GetLastWeaponUsed. Mais pour les combats entre PJ, on peut faire comment ?
Question déjà posée sur d'anciens posts. Pour résumer je dirais que vu que nous ne pouvons pas agir sur un event OnDamaged pour les PJ, il n'est pas possible de créer un système identique pour le combat PvP.
Certains utilisent le OnHit de l'arme en y ajoutant un pouvoir unique, tout en ajoutant un pouvoir unique "au toucher" sur des objets comme les armures ou les boucliers. Cela nécessite bien entendu une modification de TOUS les items de ton module. C'est une solution...
Post
Bonjour à tous,

Je remonte à mon tour le Topic, je recherche les scipts pour avoir un monde persistant digne de son nom. (Et d'ailleurs, pour le réseau Local, cela fonctionne comment? Il y a aussi ce genre de soucis?)

Ce qui m'interresse principalement est le "Système de persistance des PV, de la Loc de déco et des réputations de faction" ainsi que l'enregistrement de script car mon module est asses complet dans les dialogues.

En espérant recevoir une réponse, sachant que le membre précédent n'en a pas eu.
Pour ne pas que ce vibrant appel au secours tombe dans les méandres du forum:
Je ne pense pas que tu trouveras quelqu'un qui te balance un module vide prêt à l'emploi et entre nous, je ne te le conseille pas parce que, en général, ce que tu ne fais pas toi-même, tu ne le comprends pas et tu ne le maîtrises pas, ce qui conduit à des situations ou soudain, les NPC attaquent tes joueurs sans raison parce que tu n'as pas mis la bonne variable sur la porte, le trigger qu'il a traversé et qu'un script à la con a mal interprété le mouvement du joueur.

En gros, pour t'aider :

Persistance des hp = stocker toutes les 6 secondes les hp sur un objet de l'inventaire du PJ.

Location = idem mais c'est plus dur parce que SetLocalLocation ne résiste pas au reset du module (bug)

Réputation de faction = un objet dans l'inventaire et un script dans le OnEnter de chaque zone pvp qui met le joueur ennemi ou ami des autres PC en fonction de leur objet

Enregistrement de script = heu, je ne sais pas, je ne comprend pas.... clique sur "Enregistrer" et ton script s'enregistre (mais je me doute qu'il ne s'agit pas de ça.

Désolé de ne pas arriver avec les scripts miracles mais je préfère la méthode où les apprentis scripteurs comprennent et tâtonnent plutôt que le passage au self service du script (surtout que la moitié des réponses se trouvent dans la fonction Rechercher).

Oui, je suis vilaine
Répondre

Connectés sur ce fil

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