Réinitialisation du contenu des plaçables.

Répondre
Partager Rechercher
Bonjour à tous.

Voilà, étant assez nulos en scripts, débrouillard pour adapter des scripts existants mais incapable d'en créer un moi-même, j'aimerais savoir comment on peut faire en sorte que le contenu d'un coffre par exemple se réinitialise au bout d'un certain temps (avec un contenu aléatoire comme avec le script nw_o2_generalhig par exemple) . J'ai vu ce système dans un module online et ça m'a paru assez intéressant (vue que j'ai des rencontres qui se réactivent, autant que les contenus des coffres le fassent aussi pour donner plus de longévité à mon module) .

Autre chose... Dans ce même module fourmillant de bonnes idées, module nommé "Eau Profonde" au passage, j'ai remarqué un truc vachement sympa : une animation de perso marchant sur la pointe des pieds lorsqu'ils sont en mode discrétion. Quelqu'un a-t-il des infos à ce sujet ? Merci d'avance !!

Problème résolu, grâce à ce site. Pour celles et ceux qui rechercherais la même information utile, je vous communique le lien qui m'a rendu service : https://archives.jeuxonline.info/fils/127562.html

Dernière modification par Aldebrand ; 03/12/2013 à 22h54. Motif: Problème résolu
Désolé de ne pas avoir lu ton message plus tôt, j'aurai pu te dépanner. C'est vrai que parfois Script Generator ne suffit pas^^
C'est bon d'avoir toujours accès à ces puits de savoir infini
Par contre pour ce qui est de l'animation... Recherche en cours...

Dernière modification par kaliopsys ; 06/12/2013 à 09h12.
Merci c'est sympa !! Ca donnait un effet vraiment réaliste mais comme je n'ai plus aucun contact avec les créateurs du module (je ne faisais pas de moding à l'époque) je ne peux pas leurs demander. Je poursuis mes recherches de mon côté si je trouve quelque chose, je le mettais ici, je pense que ça peut intéresser pas mal de gens.
Si tu as d'autres demandes du genre n'hésite pas j'ai beaucoup bossé sur mon module et quand j'ai du temps libre je suis encore à la recherche du petit-détail-qui-tue-qui-ferait-la-différence donc...
Et c'est sympa de voir des messages postés sur ces forums
Citation :
Publié par kaliopsys
Si tu as d'autres demandes du genre n'hésite pas j'ai beaucoup bossé sur mon module et quand j'ai du temps libre je suis encore à la recherche du petit-détail-qui-tue-qui-ferait-la-différence donc...
Et c'est sympa de voir des messages postés sur ces forums
Ha tiens bah à propos de petit détail qui tue : j'ai découvert que le script initialement utilisé pour changer les plaçables en squelettes ou en zombies pouvait aussi servir à la transformation des créatures. Je m'en sers pour les lycanthrope notamment, mais aussi sur les vampires qui du coup peuvent se changer en chauve-souris dans certaines condition, au choix quand ils meurent, qu'ils sont blessés, attaqués, etc. C'est bête à dire, mais c'est en testant ces petits riens qu'on découvre des scripts multi-usages.
J'ai pas mal de plaçables de type corps qui se relevaient en zombies ou en squelettes, et j'ai galéré pour avoir des statues qui se transforment en gargouilles d'un niveau approprié à la rencontre parce qu'il n'en existait qu'un type à la base! Pourtant c'est pas si compliqué que ça
Mais le coup des vampires en chauves-souris, pas mal
Citation :
Publié par kaliopsys
J'ai pas mal de plaçables de type corps qui se relevaient en zombies ou en squelettes, et j'ai galéré pour avoir des statues qui se transforment en gargouilles d'un niveau approprié à la rencontre parce qu'il n'en existait qu'un type à la base! Pourtant c'est pas si compliqué que ça
Mais le coup des vampires en chauves-souris, pas mal
Tiens bin regardes ce lien https://forums.jeuxonline.info/showthread.php?t=1240384 , c'est le premier "article" que j'ai posté ici, suffit de suivre les indications pour obtenir les mêmes résultats (mes vampires se changent en chauve-souris OU aléatoirement en loup quand on les tue) tu verras c'est simple. Mais pour les gargouilles justement, je suis en train de décortiquer "Shadow of Undrentides" pour savoir comment on s'y prend pour avoir une gargouille figée (je crois que c'est une script à mettre dans le OnSpawn) et pour qu'elle s'anime quand le perso fait telle ou telle chose (le plus simple c'est une zone qui active la bébête quand on y entre) .
Je me suis mis au modding récemment (y'a deux semaines) sur NWN, mais je ne suis pas totalement noob vu que j'ai déja moddé un peu pour d'autres jeux. Par contre pour les scripts je débute. Je suis content de voir qu'il y a encore un peu d'animation ici.
Pour le voleur sur la pointe des pieds, ça me tue, si il y a moyen de trouver cette animation j'offre mon royaume en échange !!!
Citation :
Publié par Khalen
Je me suis mis au modding récemment (y'a deux semaines) sur NWN, mais je ne suis pas totalement noob vu que j'ai déja moddé un peu pour d'autres jeux. Par contre pour les scripts je débute. Je suis content de voir qu'il y a encore un peu d'animation ici.
Pour le voleur sur la pointe des pieds, ça me tue, si il y a moyen de trouver cette animation j'offre mon royaume en échange !!!
Oui j'avais vu cette animation sur "Eauprofonde" , un monde persistant français sur lequel je jouais régulièrement il y a quelques années. Mais à l'époque je faisais pas de mod. Mais ils ont bien dû trouver ce truc quelque part et je reste persuadé que d'autres le connaissent alors je continu à chercher. Si je trouve, je te donnerais l'astuce.

Pour ma part j'ai déjà fais un autre mod basé sur un vieux jeu de plateau que j'aimais bien "Dungeonquest" , mais je me suis contenté de ce qui existait déjà, je ne faisais aucun script et aucune quête (je n'en comprenais pas le fonctionnement) . Aujourd'hui, maintenant que je comprend un peu mieux comment fonctionnent les scripts, j'essaye deux trois trucs. Je sais en modifier les tenants et aboutissants, mais je serais parfaitement incapable d'en créer un de toute pièce par contre.
Alors pour en revenir aux gargouilles, je viens de vérifier le fonctionnement sur mon module:
- une statue avec un script sur le OnHeartBeat dont la condition d'exécution est liée à la distance à laquelle se tient le PJ et qui entraîne la transformation en...
- une créature! Avec un script sur le OnHeartBeat qui la re-transforme en statue si le PJ est trop loin ou mort.
Donc ça doit pas être bien compliqué de modifier la condition de transformation de la chose...
Par exemple j'ai repris ton exemple d'un déclencheur sur le sol avec un script sur le OnEnter:

Code PHP:

void main()
{
if (!
GetIsPC(GetEnteringObject())) return;

object oStatue GetObjectByTag("tag_de_la_statue");
object oCreature CreateObject(OBJECT_TYPE_CREATURE"tag_de_la_creature"GetLocation(oStatue)); // la créature de ton choix est créée à l'emplacement de la statue

SetPlotFlag(oStatueFALSE); // dans mon exemple la statue ne pouvait pas être détruite
DestroyObject(oStatue0.5); // la statue est détruite


Dernière modification par kaliopsys ; 17/01/2014 à 16h13. Motif: Testé et approuvé!
Citation :
Publié par kaliopsys
Alors pour en revenir aux gargouilles, je viens de vérifier le fonctionnement sur mon module:
- une statue avec un script sur le OnHeartBeat dont la condition d'exécution est liée à la distance à laquelle se tient le PJ et qui entraîne la transformation en...
- une créature! Avec un script sur le OnHeartBeat qui la re-transforme en statue si le PJ est trop loin ou mort.
Donc ça doit pas être bien compliqué de modifier la condition de transformation de la chose...
Par exemple j'ai repris ton exemple d'un déclencheur sur le sol avec un script sur le OnEnter:

void main()
{

if (!GetIsPC(GetEnteringObject())) return;

object oStatue = GetObjectByTag("tag_de_la_statue");

object oCreature = CreateObject(OBJECT_TYPE_CREATURE, "tag_de_la_creature", GetLocation(oStatue)); // la créature de ton choix est créée à l'emplacement de la statue

SetPlotFlag(oStatue, FALSE); // dans mon exemple la statue ne pouvait pas être détruite
DestroyObject(oStatue, 0.5); // la statue est détruite

}
Salut Kaliopsis.

C'est pas exactement ce que j'avais en tête, mais ce que tu me proposes là est très intéressant et peut avoir de nombreuses applications.

Ce à quoi je pensais c'est à une gargouille (la créature) figée comme si elle était sous l'emprise d'un sort de pétrification et qui ne s'active que si on l'approche, qu'on entre dans une zone, qu'on fouille un coffre ou quoi que ce soit qui passe par la tête d'un MJ. J'ai déjà trouvé un script très simple qui permet de donner à la créature l'aspect de la pierre (en fait elle a l'apparence du sort "peau de pierre) et qui se place dans le "OnSpawn"

void main()
{
effect eVis = EffectVisualEffect(VFX_DUR_PROT_STONESKIN);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eVis, OBJECT_SELF);
}

Il suffit de changer la donnée que j'ai surlignée pour avoir un effet différent, d'ailleurs, sachant que le script ne donne aucun effet satisfaisant sur les grandes créatures, mieux vaut la changer avec VFX_DUR_PETRIFY même si l'effet est moins beau et que la créature reprend son aspect normal lorsqu'elle meurt. Remplaces la par VFX_DUR_GHOSTLY_VISAGE et elle aura une apparence spectrale.
Bon mais je m'éloigne du sujet. Disons que ce que j'avais vu dans "Shadow of Undrentides" c'était une gargouille avec cette apparence VFX_DUR_PROT_STONESKIN figée et qui ne réagissait que lorsqu'on s'approchait d'elle. J'ai trouvé un script assez long et compliqué dont j'essaye de comprendre le fonctionnement général dans ce module. Ca ne doit pas être si compliqué que ça mais comme je le disais, je tâtonne.
Oui excuse-moi c'est après avoir écrit la réponse que je me suis dit que tu cherchais peut-être plutôt une pétrification, j'en ai le cœur net!
Je vais donc tester ça cet après-midi avec l'effet visuel de Peau de pierre^^ et je repasse par ici...
Après avoir regardé comment ça fonctionnait dans SOU et moult essais j'ai trouvé ça:

Code PHP:

//script OnSpawn de la créature
void main()
{
DelayCommand(1.0ExecuteScript("script_statue"OBJECT_SELF));

Car j'ai été incapable d'appliquer un DelayCommand directement sur le ApplyEffectToObject...
Mais au moins comme ça la créature ne spawn pas en statue directement, elle a le temps de prendre une pause

Code PHP:

//script_statue
void main()
{
effect eStone EffectPetrify();
ApplyEffectToObject(DURATION_TYPE_PERMANENTeStoneOBJECT_SELF);
SetPlotFlag(OBJECT_SELFTRUE); // aucun dégât ne peut être fait à la statue

et pour finir (par contre, dans les propriétés avancées de la créature il faut changer la faction et choisir Populace par exemple) :

Code PHP:

//scritp OnHeartBeat de la créature
#include "nw_i0_generic"
#include "nw_i0_spells"
void main()
{
object oPC GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC);
if (
GetDistanceToObject(oPC) <= 5.0 // on peut modifier la distance à l'envi
{
RemoveSpecificEffect(EFFECT_TYPE_PETRIFYOBJECT_SELF);
ChangeToStandardFaction(OBJECT_SELFSTANDARD_FACTION_HOSTILE);
SetPlotFlag(OBJECT_SELFFALSE);
DetermineCombatRound(oPC);
}

Il reste un léger problème d'orientation à régler lorsque la créature spawn...

Dernière modification par kaliopsys ; 17/01/2014 à 16h14. Motif: Nouveaux scripts testés
Citation :
Publié par kaliopsys
Après avoir regardé comment ça fonctionnait dans SOU et moult essais j'ai trouvé ça:

//script OnSpawn de la créature
void main()
{
DelayCommand(1.0, ExecuteScript("script_statue", OBJECT_SELF));
}

Car j'ai été incapable d'appliquer un DelayCommand directement sur le ApplyEffectToObject...
Mais au moins comme ça la créature ne spawn pas en statue directement, elle a le temps de prendre une pause

//script_statue
void main()
{
effect eStone = EffectPetrify();
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eStone, OBJECT_SELF);
SetPlotFlag(OBJECT_SELF, TRUE); // aucun dégât ne peut être fait à la statue
}

et pour finir (par contre, dans les propriétés avancées de la créature il faut changer la faction et choisir Populace par exemple) :

//scritp OnHeartBeat de la créature
#include "nw_i0_generic"
#include "nw_i0_spells"
void main()
{
object oPC = GetNearestCreature(CREATURE_TYPE_PLAYER_CHAR, PLAYER_CHAR_IS_PC);
if (GetDistanceToObject(oPC) <= 5.0 ) // on peut modifier la distance à l'envi
{
RemoveSpecificEffect(EFFECT_TYPE_PETRIFY, OBJECT_SELF);
ChangeToStandardFaction(OBJECT_SELF, STANDARD_FACTION_HOSTILE);
SetPlotFlag(OBJECT_SELF, FALSE);
DetermineCombatRound(oPC);
}
}

Il reste un léger problème d'orientation à régler lorsque la créature spawn...
Impressionnant !

Pour le premier script, bien pensé ! C'est vrai que dans SOU, ce qui choquait c'est que si tu quittais la pièce pour y revenir après, la gargouille avait changé de pose et ça faisait tiquer. Par contre le deuxième script, je le mets où ?

Pour le troisième script, BON DIEU MAIS C'EST BIEN SÛR !!!! Comment n'ai-je pas pensé à la FACTION !!! C'était élémentaire et j'aurais DÛ y penser ! C'était juste évident ! En tous cas je vais tester tout ça dès ce soir et je te dis un GRAND MERCI pour ton aide et tes conseil. J'ai encore énormément de progrès à faire en script. Je te tiendrais au jus des résultats. Ca serait pas mal qu'on reste en contact si ça te dit. Bonne journée à toi et encore merci !
Le deuxième script ne va nulle part, il est appelé sur le OnSpawn par le premier.
Par contre tiens moi au courant de tes essais parce que je viens de relancer des tests (je trouvais ça si sympa que je voulais l'intégrer à mon module^^) et des fois, cette satanée gargouille fait le piquet!
Et on reste en contact bien sûr

Même en plaçant un déclencheur et un waypoint pour le spawn (donc j'élimine le problème d'orientation ), un coup ça marche, un coup ça marche pô... C'est hallucinant...

Et pour info, voilà le script pour le déclencheur:

Code PHP:

//script OnEnter du déclencheur
#include "nw_i0_generic"
void main()
{
if (!
GetIsPC(GetEnteringObject()))
return;
if (!
GetLocalInt(OBJECT_SELF,"NW_DO_ONCE") == 0)
return;
object oTarget GetWaypointByTag("point_de_spawn");
location lTarget GetLocation(oTarget);
object oSpawn CreateObject(OBJECT_TYPE_CREATURE"tag_de_la_bestiole"lTarget);
SetLocalInt(OBJECT_SELF,"NW_DO_ONCE",1);


Dernière modification par kaliopsys ; 17/01/2014 à 16h14. Motif: Bizarre...
Bon je vous pique votre script hein

Ca correspond bien à un truc que je voulais faire depuis longtemps : faire des statues de forme humaine mieux dessinées que les statues du jeu.
Il reste qu'il faudrait que ces statues aient une pause de statue, comme par exemple les pieds joints, le dos bien droit et les bras le long du corps comme au garde-à-vous.
Y a-t-il une animation qui permet de les faire se tenir comme ça ?
Salut!
Je ne sais pas si on peut leur faire prendre une pause précise...
Le problème que j'ai avec mon script c'est que parfois les créatures se figent dans leur position de base, avant d'avoir commencé leur animation.
Il faudrait que j'essaie le VFX_DUR_FREEZE_ANIMATION associé à un VFX_DUR_PROT_STONESKIN pour arriver aux mêmes effets... Je m'y mets dès que je peux^^

Dernière modification par kaliopsys ; 30/12/2013 à 16h17.
Mais elles sont très belles les statues déjà présentes !
C'est vrai qu'elles manque un peu d'humanité mais quand même.

Bon travail les gars sur vos scripts, en espérant que ça nous génère une petite hausse de serveur français grâce à vos idées, ça entraînerait peut-être un élan de nostalgie chez certains et l'envie de reprendre Nwn s'en suivra
Bonne année tout le monde!
Demain je récupère le PC sur lequel je bosse sur Aurora, je vais enfin pouvoir tester ce que je voulais ^^
Et si ça fonctionne comme je veux, je l'intègrerai sans aucun doute à mon module parce que les statues de gargouilles de base je peux pas dire que j'en étais totalement fan
Alors merci à Aldebrand pour l'idée de base

Alors ça avance bien, le combo FREEZE ANIMATION + STONESKIN c'est vraiment chouette, j'essaie de l'adapter sur les déclencheurs de rencontres...

Le VFX_DUR_PROT_STONESKIN sur les grandes créatures prend la forme d'une boule de terre qui tourne autour de la créature... Mais le VFX_DUR_PETRIFY donne l'effet que je voulais!
Les scripts vont suivre!

Dernière modification par kaliopsys ; 07/01/2014 à 09h34. Motif: Suite... et à suivre...
YOUHOU !!!!

Hum, pardon...
Mes scripts étaient certes bien chouettes, mais dans mon module j'avais créé des gargouilles de différents niveaux générées par des rencontres. Jusque là tout va bien, sauf que, comme vous devez le savoir, quand vous voulez qu'une créature gérée par rencontre soit orientée dans la bonne direction, bah c'est pas possible!
Alors soit-disant c'était réglé avec le patch 1.69, il suffisait de placer le point de spawn, et la marmotte...

TADAAAA!

Vous créez vos gargouilles, dans leurs propriétés avancées vous cochez Intrigue et changez leur Portée de perception pour Courte, et dans leurs scripts vous placerez les miens.
Vous créez votre rencontre avec vos gargouilles de différents niveaux, et réglez le Maximum de créatures sur 1.
Vous placez votre déclencheur de rencontre là où vous voulez, ET clic-droit Ajouter point de spawn près de l'endroit réel où vous désirez qu'une de vos magnifiques gargouilles prenne la pause. Sur le véritable point que vous aviez en fait choisi pour placer votre créature statufiée vous mettez un point de passage dont le tag sera dans mon exemple appelé "wp_statue", et vous l'orientez dans la bonne direction, forcément .

Les scripts :

Code PHP:

//:: script OnSpawn
void main()
{

object oJumpTarget GetObjectByTag("wp_statue");
float fVec GetFacing(oJumpTarget);

if(
GetIsEncounterCreature() == TRUE)
{
ActionJumpToObject(oJumpTarget);
ActionDoCommand(SetFacing(fVec));
ActionDoCommand(ClearAllActions());
DelayCommand(1.0ExecuteScript("script_stoneskin"OBJECT_SELF));
}
else
{
ActionDoCommand(ClearAllActions());
DelayCommand(1.0ExecuteScript("script_stoneskin"OBJECT_SELF));
}


Code PHP:

//:: script OnHeartBeat
#include "nw_i0_generic"
#include "nw_i0_spells"
void main()
{

object oPC GetNearestCreature(CREATURE_TYPE_PLAYER_CHARPLAYER_CHAR_IS_PC);

if (
GetDistanceToObject(oPC) <= 5.0 )
{
RemoveSpecificEffect(EFFECT_TYPE_VISUALEFFECTOBJECT_SELF);
RemoveSpecificEffect(EFFECT_TYPE_PARALYZEOBJECT_SELF);
ChangeToStandardFaction(OBJECT_SELFSTANDARD_FACTION_HOSTILE);
SetPlotFlag(OBJECT_SELFFALSE);
DeleteLocalInt(OBJECT_SELF"X1_L_IMMUNE_TO_DISPEL");
DetermineCombatRound(oPC);
}


Code PHP:

//:: script_stoneskin
void main()
{

effect ePara EffectParalyze();
effect eStoneskin EffectVisualEffect(VFX_DUR_PETRIFY);

ApplyEffectToObject(DURATION_TYPE_PERMANENTeParaOBJECT_SELF);
ApplyEffectToObject(DURATION_TYPE_PERMANENTeStoneskinOBJECT_SELF);
ChangeToStandardFaction(OBJECT_SELFSTANDARD_FACTION_COMMONER);

SetLocalInt(OBJECT_SELF"X1_L_IMMUNE_TO_DISPEL"10);

AssignCommand(OBJECT_SELFActionPlayAnimation(ANIMATION_LOOPING_PAUSE22000.0999999.0));


Code PHP:

//:: script OnConversation, OnPhysicalAttacked, OnSpellCastAt
#include "nw_i0_generic"
void main()
{
if (
GetHasEffect(EFFECT_TYPE_PETRIFYOBJECT_SELF) == TRUE)return;

Vous remarquerez le dernier script placé à trois endroits différents sur la créatures, ceci pour éviter qu'elle tourne la tête ou se tourne complètement quand vous essayez de lui parler, et de réagir à vos attaques lorsqu'elle est statufiée.
Bon cette fois j'espère que c'est la bonne

Dernière modification par kaliopsys ; 17/01/2014 à 16h15. Motif: Nouveaux scripts!
Ça marche impeccablement bien en test mais dès que j'essaie de l'importer dans mon module pour remplacer ces fameuses gargouilles, ça foire... Mais pourquoi est-il aussi méchant ?
Je me suis aperçu que lorsque je suis placé à portée de vue pour contempler leur manège tout fonctionne ! Si je lance le test en étant dans une autre pièce et que j'arrive quand tout est censé être prêt, je les trouve avec un bâton dans leur cul tout pierreux !

Dernière modification par kaliopsys ; 14/01/2014 à 15h42. Motif: Ne plus prendre en compte ce commentaire...
Ca fait ça chez moi aussi.

Les gargouilles ont les ailes repliées au centre et se tiennent dans une posture très ... euh ... rigide.
Je crois que c'est l'animation VFX_DUR_FREEZE_ANIMATION qui fait ça.
Bon puisque tu bloques je te livre mes idées en vrac, je les testerai plus tard dans la soirée.

- faire deux créatures : une figée et résistante aux dégats (perso je pense plus à une résistance aux armes plutot qu'à basculer le plotflag d'intrigue) et à faction neutre. L'autre créature hostile apparait dans un nuage d'explosion et prend la place de la première. Ensuite mettre une rencontre pour faire apparaitre la deuxième créature pile à l'emplacement de la première créature.

- faire marcher les créatures avant de les figer, même si je ne suis pas sûr que ça les figera en mouvement.

- leur faire se recevoir un sort de petrification au lieu d'appliquer seulement l'effet de pétrification ...

Enfin à tester quoi.
Répondre

Connectés sur ce fil

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