Package
#1
Posté 05 juillet 2011 - 12:20
J'ai comme qui dirait un probléme de Package avec un mod..
en fait disons que je suis en train d’agrandir et de modifier un mod déjà existant,que je mettrais sur la confrérie,wiwiland,et nexus si bien sur le créateur du mod original l'accepte.
Mais je le ferait qu'une fois que ça sera fini
en fait hier j'ai voulu rajouter a un des npc que j'ai rajouté dans ce mod une nouvelle armure de ninja,celle d'Ayame de Tenchu (http://www.tesnexus.com)
Il y a quelque chose de compliqué dans ce mod d'armure et d'armes,
dans Tenchu,Ayame brandissait toujours deux lames courtes,des tantos ou des wakizashis je ne sait pas trop...
Et le créateur de ce mod génial a qui j'ai bien aussi l'intention de demander la permission le jour ou j'aurai tout fini
a fait en sorte que le joueur puisse dégainer de ses fourreaux les deux lames en même temps,
et ça fonctionne a merveille..
mais pour que ça fonctionne il faut que le joueur prenne l'arme dans un coffre et non pas que ça soit déjà dans l'inventaire dés le début du jeu,
c'est le script de l'arme qui veut ça..
Donc comme mettre les armes directement dans l'inventaire de mon npc ne fait pas correctement fonctionner le mod,puisque les armes apparaissent bien,mais sans leur fourreaux...
Et plutôt que de modifier un script auquel je ne comprends rien de toute façon,
Je voudrais que mon npc puisse lui même prendre l'arme en question dans un coffre,
et qu'il la garde en permanence sans jamais tenter de la reposer dans ce coffre
donc quelqu'un saurait'il ou saurait'elle m'expliquer comment faire ça avec un package ?
#2
Posté 05 juillet 2011 - 13:26
Je suppose qu'avec un package de type 'Find', en mettant ton conteneur en location et l'arme en target ça devrait fonctionner. Il faut aussi mettre comme condition, que ton NPC n'ai pas l'arme dans son inventaire (avec GetItemCount) pour éviter qu'il ne la cherche en permanence.
Apres je pense que tu te casse un peu la tête, les block OnAdd sont exécuté également lorsque l'objet est ajouté via additem, donc un script tout simple pour ajouter l'arme dans l'inventaire du NPC à l'initialisation du mod devrait fonctionner également.
Une dernière possibilité est de remplacer le block onAdd du script de l'arme par ceci, en tout début du block GameMode :
if ( who != GetContainer ) set who to GetContainer if ( who.isActor != 0 ) set ExcF to 1 else set ExcF to 0 endif endif
#3
Posté 05 juillet 2011 - 13:40
Ridiane, le 05 juillet 2011 - 13:26, dit :
Mais oui, la coup du package est compliqué pour rien, la modification du script proposée par Ridiane sera plus... simple et efficace normalement...
Citation
Variables nommées n'importe comment, aucune indentation cohérente (mieux vaut aucune indentation qu'un truc mal indenté), ni commentaire...
#4
Posté 05 juillet 2011 - 15:51
Ridiane, le 05 juillet 2011 - 13:26, dit :
Je suppose qu'avec un package de type 'Find', en mettant ton conteneur en location et l'arme en target ça devrait fonctionner. Il faut aussi mettre comme condition, que ton NPC n'ai pas l'arme dans son inventaire (avec GetItemCount) pour éviter qu'il ne la cherche en permanence.
Apres je pense que tu te casse un peu la tête, les block OnAdd sont exécuté également lorsque l'objet est ajouté via additem, donc un script tout simple pour ajouter l'arme dans l'inventaire du NPC à l'initialisation du mod devrait fonctionner également.
Une dernière possibilité est de remplacer le block onAdd du script de l'arme par ceci, en tout début du block GameMode :
if ( who != GetContainer ) set who to GetContainer if ( who.isActor != 0 ) set ExcF to 1 else set ExcF to 0 endif endif
je sais désolé,mais il a été toujours dans mon habitude de me prendre la tête la ou ça n'est pas forcémment nécessaire..
merci en tout cas Ridiane,et toi aussi Shadow
je vais tenter ça maintenant..
mais avant toute chose j'ai un deuxième probléme,n'étant pas doué pour les scripts je ne parlerais pas de scripts,
même s'il en faut un..
j'ai disons mis deux packages parmi tant d'autres pour mes 3pnjs qui contiennent tout les deux une idle anim chacun
les deux fonctionnent très bien,mais pour l'un des deux packages j'aimerais que les 3 perso enlèvent leur armure d'origine pour la remplacer par une autre (uniquement dans 1 package)
comment faire ?
sachant que j'ai mis les deux types d'armures dans chaque inventaire de mes 3 persos,et que pendant le package,hormis la localisation,j'ai mis use item at "l'objet en question"mais ça ne change rien..
question de scripts,ou package mal réalisé ?
#5
Posté 05 juillet 2011 - 16:28
Lord Jeodith, le 05 juillet 2011 - 15:51, dit :
sachant que j'ai mis les deux types d'armures dans chaque inventaire de mes 3 persos,et que pendant le package,hormis la localisation,j'ai mis use item at "l'objet en question"mais ça ne change rien..
question de scripts,ou package mal réalisé ?
Si tu veux qu'ils portent une armure particulière juste pendant la durée du package, il faut leur coller un script dans ce genre...
Begin OnPackageStart IDDuPackage ;Lorsque le package commence... ;Nettoyage de l inventaire pour etre sur... RemoveItem IDArmureDuPackage 32767 RemoveItem IDArmureStandard 32767 ;On ajoute l armure qui doit etre portee durant le package... AddItem IDArmureDuPackage 1 End Begin OnPackageChange IDDuPackage ;Lorsque l on passe a un autre package... ;Nettoyage de l inventaire pour etre sur... RemoveItem IDArmureDuPackage 32767 RemoveItem IDArmureStandard 32767 ;On ajoute l armure standard... AddItem IDArmurePrecedante 1 End Begin GameMode ;Si l acteur ne porte pas l armure standard en dehors du package... if (GetIsCurrentPackage IDDuPackage == 0) ;On s assure que l acteur porte la bonne armure... if (GetItemCount IDArmureStandard == 0) AddItem IDArmureStandard 1 elseif (GetItemCount IDArmureDuPackage > 0) RemoveItem IDArmureDuPackage 32767 endif endif End
En fait, un acteur porte l'armure qui le protège le mieux quoi qu'il arrive...
Le seul moyen pour qu'il porte l'armure souhaitée, il faut obligatoirement faire des ajouts/suppressions de l'armure en question...
Par contre on peut "tricher", si tu as une armure et une tenue, dans les packages il y a le flag "Armor unequipped" qui permet de forcer l'acteur à ne pas porter d'armure (il porte donc les vêtements qu'il a à la place), c'est ce qui est utilisé pour empêcher que les PNJ dorment tout en armure...
Le script que j'ai donné peut probablement être amélioré, par exemple pour s'assurer que le PNJ ait bien les deux armures dans son inventaire lorsqu'il meurt (utilisation d'un bloc OnDeath)...
#6
Posté 05 juillet 2011 - 17:09
vu qu'en fait j'ai réalisé un package disons Erotique ou mes trois persos féminins après un longue journée de labeur prennent un bain dans lieu inaccessible au joueur (enfin au début),et que ce package utilise déjà l'option " Armor et Weapon unequipped "
Donc a moins que je ne transforme ces armures en vêtements,ce qui pourrait s'avérer être la solution..
comment faire en sorte pour que mes 3 persos féminins ne portent rien pendant leur package du bain ? ni vêtements ni armure pour un minimum de réalisme,
les chiffres que tu mets en vert sont'ils les référence des objets Shadow ?
ha et le perso a qui j'avais mis les deux lames d'Ayame les prends bien dans son coffre et tout fonctionne a merveille,si le joueur et a coté d'elle au moment du package,autrement elle ne le fera pas si le joueur n'est pas dans le même lieu qu'elle au moment du package..
donc a moins d'enlever les deux lames d'Ayame,et de les remplacer par des armes normales qui seront dans son inventaire dés le début,
je ne vois pas la solution..
Oh si encore un script..
Modifié par Lord Jeodith, 05 juillet 2011 - 17:19.
#7
Posté 05 juillet 2011 - 17:35
Lord Jeodith, le 05 juillet 2011 - 17:09, dit :
En début de package tu enlèves tout les objets qu'elles ne doivent pas porter, et au changement de package tu les remets...
Mon script est extensible quelque soit le nombre de packages, et fonctionne pour tout objet de l'inventaire, que se soit armes, vêtements ou armures...
Il faut juste changer les ID, et ajouter plus ou moins de "AddItem", "RemoveItem" et de blocs...
Lord Jeodith, le 05 juillet 2011 - 17:09, dit :
C'est le nombre de fois que l'opération est faite...
RemoveItem IDArmureDuPackage 32767Va retirer de l'inventaire 32767 armures dont l'ID est IDArmureDuPackage...
Pourquoi 32767 et non pas 1 armure...? Pour prévoir à tout, si le PJ quitte la cellule avant la fin du package, le PNJ risque de se retrouver à terme avec deux exemplaires de l'armure voire plus...
Par principe de précaution, quand on ne veut plus que l'acteur (ou le joueur) ait un objet, autant en retirer un très grand nombre de fois...
Les développeurs du jeu ont souvent utilisé le nombre "1" (par exemple pour les "combats d'arène" à Creuset dans SI), et donc on s'est retrouvé avec des PNJ qui ont tout plein d'exemplaires de l'objet en question (jusqu'à surcharge du PNJ...!)
Les divers patch non-officiels ont donc remplacé le "1" par de gros chiffres...
Plus généralement, quand tu ne connais pas une fonction, recherche la dans le wiwiki, tu auras très probablement comme premier résultat la description de la commande et tous ses arguments...
Par exemple pour RemoveItem...
Lord Jeodith, le 05 juillet 2011 - 17:09, dit :
donc a moins d'enlever les deux lames d'Ayame,et de les remplacer par des armes normales qui seront dans son inventaire dés le début,
je ne vois pas la solution..
Oh si encore un script..
Mais dans un ordre général, part du principe que le script fonctionnera au ralentit dès que le PJ n'est plus dans la cellule, et la plupart des bloc en onXXX ne fonctionnent plus (en gros seuls GameMode et MenuMode fonctionnent... au ralentit donc...)
Ce principe est faux dans les détails, mais les grandes lignes c'est ça... Partir sur ce principe devrait éviter pas mal de soucis *normalement*...
#8
Posté 06 juillet 2011 - 11:51
Bonjour Shadow
bon alors en fait je fait :
Begin OnPackageStart BainAyame
RemoveItem XXAyame1 32767
RemoveItem XTenuededanse1 32767
end
la tout se passe bien,le pnj enlève bien ses vêtements pour prendre son bain
ensuite pour que le pnj les récupère dans le package suivant j'ai fait :
Begin OnPackageChange(ou Start j'ai tenté les deux) ReposAyame
AddItem XXAyame1 1
AddItem XTenuededanse1 1
end
mais la mon pnj ne récupère pas ses vêtements,alors j'ai tenté
également ta dernière solution :
Begin GameMode
if (GetIsCurrentPackage SommeilAyame == 0)
if (GetItemCount XTenuededanse1 == 0)
if (GetItemCount XXAyame1 == 0)
AddItem XTenuededanse1 1
AddItem XXAyame1 1
endif
endif
end
mais ça ne change rien non plus
et ça me dit surtout qu'il y a un probléme de parenthèse,alors j'ai enlevé les parenthéses et après ça me disait qu'il y avais un probléme avec if
donc bon voila quoi..
je n'ai pas trop compris par contre ton histoire en ce qui concerne le script des lames d'Ayame
Modifié par Lord Jeodith, 06 juillet 2011 - 12:01.
#9
Posté 06 juillet 2011 - 12:11
Lord Jeodith, le 06 juillet 2011 - 11:51, dit :
Bonjour Shadow
bon alors en fait je fait :
Begin OnPackageStart BainAyame
RemoveItem XXAyame1 32767
RemoveItem XTenuededanse1 32767
end
la tout se passe bien,le pnj enlève bien ses vêtements pour prendre son bain
ensuite pour que le pnj les récupère dans le package suivant j'ai fait :
Begin OnPackageChange(ou Start j'ai tenté les deux) ReposAyame
AddItem XXAyame1 1
AddItem XTenuededanse1 1
end
mais la mon pnj ne récupère pas ses vêtements
Begin OnPackageStart BainAyame ;Lorsque le package BainAyame commence RemoveItem XXAyame1 32767 RemoveItem XTenuededanse1 32767 end Begin OnPackageChange BainAyame ;Lorsque le package BainAyame est remplace par un autre AddItem XXAyame1 1 AddItem XTenuededanse1 1 end
Lord Jeodith, le 06 juillet 2011 - 11:51, dit :
[...]
mais ça ne change rien non plus
et ça me dit surtout qu'il y a un probléme de parenthèse,alors j'ai enlevé les parenthéses et après ça me disait qu'il y avais un probléme avec if
donc bon voila quoi..
Tout if doit être fermé par un endif...
Lord Jeodith, le 06 juillet 2011 - 11:51, dit :
Alors j'ai simplement donné un conseil d'ordre général, sans détail je ne peux pas faire mieux...
ps: Utilise les balises de code comme on fait pour écrire les scripts, tu gardes l'indentation notamment...
Car là, le rouge est lisible sur la skin beige, mais illisible sur la skin mauve du forum...
#10
Posté 06 juillet 2011 - 19:32
étant devenu illisible a cause des carractéres et de l'orthographe très spécial,j'ai pas trop compris ce qui se passait quand j'ai validé mon message il y a quelques minutes
Donc j'en reviens a dire que je laisse tomber le script d'arme,car ça me saoule
de voir que quand je suis dans la même cellule que mon pnj, qu'elle prends bien son arme dans le coffre que je lui ai attribué
Et que quand je ne me trouve plus dans cette cellule et qu'elle est censée s'y trouver tout les jours a la même heure,
elle ne prends pas l'arme..
voila donc je laisse tomber ça pour un package plus gros et plus intéréssant
En fait j'ai voulu copier la séance d'entrainement des deux lames qu'on trouve dans le temple du maitre des nuages,pour que 2 de mes pnj puissent s'entrainer de la même façon
j'ai donc copié les deux scripts,fait un package pour chacun des pnj,à l'identique de celui des deux lames
j'ai changé les id,les noms,tout,j'ai créé deux marqueurs
bon et après avoir tout fait a l'identique en ayant pris soin de tout vérifier (packages,scripts,marqueurs)
j'ai voulu tester le package in game
et la surprise rien ne marche,les persos ne se déplacent pas a l'heure du package et restent planté la ou ils étaient
j'espère que le package des lames n'entre pas en collision avec le mien..
autrement je ne vois pas comment faire
J'ai cependant remarqué un truc qui est peut être une erreur de ma part,
lors de la création des scripts,j'ai remarqué sur l'original qu'il y avais "Blade1Pratice" et Blade2Pratice"
croyant que ça correspondait au package des deux lames
j'ai donc remplacé le Blade1 et 2pratice par le nom du Package de mes personnages "EntrainementMizuchi" et "EntrainementKagame"
mais le probléme c'est qu'il n'existe aucun package du nom de Blade1Pratice et Blade2Pratice
mais seulement CloudRulerBlade1Pratice..
donc en fait a quoi fait référence Blade1Pratice et Blade2Pratice ?
bon si ça se trouve je me prends encore la tête pour rien mais j'aimerais bien en être sur
avant de reprendre ce package
#11
Posté 06 juillet 2011 - 19:50
Se sont des variables, à la troisième ligne du script, les variables BladeXPractice sont déclarées...
Le nom des variables importent peu...
Les packages sont cités ici...
if Skill == 0 if GetIsCurrentPackage CloudRulerBlade1PracticeOutside == 1 if GetDistance Player <= 400 if player.getav Blade < 90 && player.getav Block <90 set SkillTimer to ( SkillTimer + GetSecondsPassed ) set Points to 1 endif endif endif endifC'est facile à réperer, il y a le mot "package"...
#12
Posté 07 juillet 2011 - 19:16
Shadow she-wolf, le 06 juillet 2011 - 19:50, dit :
Se sont des variables, à la troisième ligne du script, les variables BladeXPractice sont déclarées...
Le nom des variables importent peu...
Les packages sont cités ici...
if Skill == 0 if GetIsCurrentPackage CloudRulerBlade1PracticeOutside == 1 if GetDistance Player <= 400 if player.getav Blade < 90 && player.getav Block <90 set SkillTimer to ( SkillTimer + GetSecondsPassed ) set Points to 1 endif endif endif endifC'est facile à réperer, il y a le mot "package"...
je te remercie de ton aide
même si le package des lames que j'ai copié ne fonctionne toujours pas,j'ai corrigé toutes les erreurs que j'ai pu trouver
mais mes deux persos refusent toujours d'aller vers les marqueurs du package en question et de s'y entrainer,et rien ne se passe durant le temps du package..
donc je crois que je vais laisser tomber le scripting,voire le modding ou arrêter de demander de l'aide sur ce site,car a chaque fois que j'écris un message un peu gros ici
tout ce que j'écris deviens soudainement illisible..
alors que je perds du temps a m'appliquer a écrire tout ceci correctement afin d'en faciliter la lecture a toi et aux autres
il faut qu'une fois mon message validé en cliquant sur "Ajouter la réponse" tout devienne illisible
Bonjour
juste par hasard,
est ce que quelqu'un connaitrais un script qui permettrais aux pnj d'arriver a l'heure précise de leurs packages et non pas d'avoir des retards comme ça arrive souvent ?
merci d'avance
Modifié par Lord Jeodith, 07 juillet 2011 - 19:17.
#13
Posté 07 juillet 2011 - 20:01
Lord Jeodith, le 07 juillet 2011 - 19:16, dit :
On ne peut pas dire à un PNJ "à 8h pile, tu seras assit ici"... Mais plutôt "A partir de 8h tu iras t'asseoir pendant x heures"...
L'heure que tu spécifie pour un package est l'heure où son PNJ va commencer à le réaliser, avant, il ne peut pas...
Et c'est assez simple de comprendre pourquoi...
Puisque quand il débute son package, il peut être à 1mètre du siège où il doit s'asseoir comme il peut être dans une autre ville... Le jeu ne peut pas se permettre de calculer à l'avance ce que devra faire le PNJ...
J'imagine que c'est ce dont tu parles par "retard"...?
#14
Posté 07 juillet 2011 - 20:47
Shadow she-wolf, le 07 juillet 2011 - 20:01, dit :
Lord Jeodith, le 07 juillet 2011 - 19:16, dit :
On ne peut pas dire à un PNJ "à 8h pile, tu seras assit ici"... Mais plutôt "A partir de 8h tu iras t'asseoir pendant x heures"...
L'heure que tu spécifie pour un package est l'heure où son PNJ va commencer à le réaliser, avant, il ne peut pas...
Et c'est assez simple de comprendre pourquoi...
Puisque quand il débute son package, il peut être à 1mètre du siège où il doit s'asseoir comme il peut être dans une autre ville... Le jeu ne peut pas se permettre de calculer à l'avance ce que devra faire le PNJ...
J'imagine que c'est ce dont tu parles par "retard"...?
Je comprends très bien..
tampis si mes pnjs font parfois leurs packages avec 1h de retard,
par exemple une patrouille qui était censée commencer a 8 H et le perso la fait parfois a 9h00 comme parfois pas du tout..
mais bon la encore c'est rare,
J'ai remarqué que tu travaillais sur un projet très intéressant "Morrowind" donc je ne vais pas te faire perdre plus de temps
mais si dés fois tu le savais..
Existe t'il un moyen pour que la neige tombe matin,midi et soir en permanence avec du brouillard autour du lieu sur lequel je travaille ?
#16
Posté 08 juillet 2011 - 10:22
Shadow she-wolf, le 07 juillet 2011 - 21:33, dit :
Si ton package n'est pas joué, c'est que ses conditions ne sont pas correctes OU qu'un autre package prend le dessus...
Quant à l'histoire de la météo, il faut créer une région...
C'est bon pour les packages,il a juste fallu que je retire mes 3 persos de la carte,que je lance une partie (donc sans eux)
de retour sur le TESCS,j'ai remis les persos sur des emplacements différents et la tout marche nickel..(bizarre)
Lord Jeodith, le 07 juillet 2011 - 23:43, dit :
Shadow she-wolf, le 07 juillet 2011 - 21:33, dit :
Si ton package n'est pas joué, c'est que ses conditions ne sont pas correctes OU qu'un autre package prend le dessus...
Quant à l'histoire de la météo, il faut créer une région...
C'est bon pour les packages,il a juste fallu que je retire mes 3 persos de la carte,que je lance une partie (donc sans eux)
de retour sur le TESCS,j'ai remis les persos sur des emplacements différents et la tout marche nickel..(bizarre)
Et merci pour ce petit tuto Shadow je crois avoir trouvé ce que je cherchais
#17
Posté 11 juillet 2011 - 08:52
Lord Jeodith, le 10 juillet 2011 - 23:22, dit :
j'ai comme des ombres qui sont apparues a l'endroit ou j'ai enlevé arbres et rochers me génant,et le probléme c'est qu'elle ne partent pas d'elles même..
Pour ton second problème, je n'ai rien compris du tout du tout...
Accessoirement, on essaie de faire en sorte "un problème=un sujet", pour faciliter les recherches...
Tes problèmes n'ont plus aucun rapport avec les packages IA, donc il vaut mieux que tu fasses un nouveau sujet pour ton problème de landscape...
#18
Posté 11 juillet 2011 - 10:14
Shadow she-wolf, le 11 juillet 2011 - 08:52, dit :
Lord Jeodith, le 10 juillet 2011 - 23:22, dit :
j'ai comme des ombres qui sont apparues a l'endroit ou j'ai enlevé arbres et rochers me génant,et le probléme c'est qu'elle ne partent pas d'elles même..
Pour ton second problème, je n'ai rien compris du tout du tout...
Accessoirement, on essaie de faire en sorte "un problème=un sujet", pour faciliter les recherches...
Tes problèmes n'ont plus aucun rapport avec les packages IA, donc il vaut mieux que tu fasses un nouveau sujet pour ton problème de landscape...
d'accord puisque je suis hors sujet
merci pour ton aide
Modifié par Lord Jeodith, 11 juillet 2011 - 10:39.
0 utilisateur(s) li(sen)t ce sujet
0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)