Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > objet magique
objet magique
Par ochimo le 24/11/2002 à 22:52:26 (#2635707)
Je voudrais dupliquer l'équivalent d'un shapechange de druide, mais via un objet, et pas un de ceux portés par le PJ (cad pas un anneau, ceinture... plutôt une pierre précieuse par exemple).
En fait la race d'un de mes joueur lui permet de changer de forme (en félin) et dans la mesure ou il semble trés trés trés difficile de modifier les caractéristiques de race (résultat d'un post précedent sur ce même forum) je me retourne donc vers des pouvoirs d'objets...
Si l'un d'entre vous a déjà fait un truc de ce genre ou a une idée, ça me sortirait une maxi épine du pied (d'autant que le scénar est prévu pour dans pas longtemps et que j'ai déjà pas mal sabré mon joueur au niveau de l'adaptation de son matos, si en plus il paume une des compétence de race qui le tient à coeur...)
Encore merci à tous,
OCHIMO
:merci:
Par miriandel le 24/11/2002 à 23:23:16 (#2635940)
Tu crées ta pierre et tu lui colles comme propriété le sort "propriété unique sur soi uniquement" (traduction libre, je joue pas en français).
Dans le OnActivateItem de ton module, tu lances, à l'activation de cette pierre:
ApplyEffectToObject(DURATION_TYPE_PERMANENT, EffectAbilityIncrease(ABILITY_STRENGTH, x), PJ);
C'est ça que tu voulais ?
oui et non
Par ochimo le 24/11/2002 à 23:34:19 (#2636013)
Je ne veux pas une modif des carac (for, dex...) mais un changement de forme (en animal) ; Je parlais d'une modif des caractéristiques de race en référence à cette capacité dechangement de forme.
Si vous avez une idée...
OCHIMO:merci:
Par miriandel le 25/11/2002 à 0:06:48 (#2636245)
Par contre, la variété dans les formes est pas extraordinaires.
Sauf la succube, j'aime bien la succube... :monstre:
Par eMRaistlin le 25/11/2002 à 0:32:58 (#2636408)
Par ochimo le 25/11/2002 à 10:06:41 (#2637726)
Pas de problème pour le local vault, j'ai un "total control" sur mes pj (hehe) et puis le hak j'en utilise déjà un méga (donc ça peut pas être pire !!) si tu peux me détailler cette soluce la aussi, je suis preneur.
Merci encore
OCHIMO:merci:
Par ochimo le 25/11/2002 à 12:17:45 (#2638558)
à propos de la réponse de miriandel, il va faloir m'aider un peu:
je crée la pierre (ok), je lui colle le pouvoir à la traduction imposible (ok c bon), mais apres pour ce qui est du onactivate item du module la je nage complet...
il me demande un script...ai aia ai..
j'ai cherché ta fontion sur le nwnlexicon, elle est bien là mais je n'ai pas mieux compris la manoeuvre pour autant!!!
tu peux détailler ?
merci:merci:
Par miriandel le 25/11/2002 à 14:04:53 (#2639377)
void main()
{
object quoi = GetItemActivated();
if (GetTag(quoi) == "mapierremagique")
{
object oTarget = GetItemActivator();
// appliquer l'effet ici
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectPolymorph(POLYMORPH_TYPE_PENGUIN ), oTarget , 30.0);
return;
}
}
Ce script, tu le mets dans les propriétés du module.
Menu "Edition" -> "Propriétés du module" -> onglet "événements" -> On ActiveItem.
Par coolstar le 25/11/2002 à 14:35:37 (#2639595)
Si je puis me permettre miriandel... ;)
Je commence à saisir l'intérêt de mettre des variables (comme "object quoi= GetItemActivated();") pour économiser le CPU, mais pourtant là elles n'apparaissent qu'une fois chacune, alors en quoi est-ce pertinent dans ce cas ?
D'autre part, si on désire rendre plusieurs Objets Utilisables dans le module, n'est-il pas mieux d'attacher les Effets à un Script à-part (pour une meilleure lecture et donc organisation... nous ne sommes pas tous Scripteurs nés...) ??
Pour finir, et encore dans le cas de l'utilisation de plusieurs Objets... n'est-il pas mieux de définir l'ensemble des variables à l'Incipit (l'Entrée) du Script, plutôt que de les insérer ainsi est d'être contraint, de fait, de les réécrire autant de fois qu'il y aura d'Objet ???
Genre (c qu'un exemple... tout autre commande est valable of corse^^...)! :ange:void main()
...
{
// Définition de la "variable référence" Item
object oItem = GetItemActivated();
// Définifiton de la "variable référence" Player
object oPlayer = GetItemActivator();
//::
// Exemple avec un premier Item et son Dialogue attaché
if (GetTag(oItem) == "CS_EpeeIntelligente")
AssignCommand(oPlayer, ActionStartConversation(oPlayer, "act_epeeintellig"));
// Exemple avec un deuxieme Item et son Dialogue attaché
if (GetTag(oItem) == "CS_JouetBavard")
AssignCommand(oPlayer, ActionStartConversation(oPlayer, "act_jouetbavard"));
// Exemple avec un troisieme Item et son Dialogue attaché
if (GetTag(oItem) == "CS_HeaumeZut")
AssignCommand(oPlayer, ActionStartConversation(oPlayer, "act_heaumezut"));
}
PS : Et pourquoi toujours des IF ???
Par miriandel le 25/11/2002 à 14:50:27 (#2639714)
Personnellement, je n'instancie les variables GetItemActivated, GetItemActivator et GetItemActivatedTarget (pour les unique power qui requièrent un pointeur de cible) que quand j'en ai réellement besoin.
Quand un serveur est sensé accueillir 96 furieux, les cycles CPU comptent :hardos:
Quant à attacher les événements à des scripts, j'utilise un "include" qui englobe le code de toutes ces fonctionnalités, car la multiplication des scripts est préjudiciable dans un environnement de 7 programmeurs travaillant sur un même projet, mais c'est effectivement plus propre que de laisser le code complet dans la OnActivateItem :D
Ah oui, un truc.
Tu devrais mettre des "else" dans ton code, sinon toutes les instances des objets spéciaux sont parcourus, alors qu'on ne peut en activer qu'un à la fois.
1er test
Par ochimo le 25/11/2002 à 15:57:58 (#2640199)
Je viens d'essayer ta soluce Miriandel, mais je n'ai aucun effet quand l'objet est activé . ..
j'ai bien ajusté le tag de l'objet "focushengeyokai" dans le script et j'ai donc ça:
void main()
{
object quoi = GetItemActivated();
if (GetTag(quoi) == "focushengeyokai")
{
object oTarget = GetItemActivator();
// appliquer l'effet ici
ApplyEffectToObject(DURATION_TYPE_TEMPORARY, EffectPolymorph(POLYMORPH_TYPE_PANTHER), oTarget , 30.0);
return;
}
}
Mais ça ne marche pas. De plus, si le 30.0 correspond à une durée, comment peut on le paramettrer ? Le retour sous forme humaine peut il se faire via l'objet (au moment ou le joueur le décide )? Je crois que je ne suis pas au bout de mes peines... si tu as encore un peu de temps à me consacrer, merci d'avance!!
OCHIMO:merci:
Par miriandel le 25/11/2002 à 16:14:28 (#2640320)
Primo, tu dois t'assurer que le jeu intercepte bien l'usage de ta pierre, donc, tu placeras ceci :
SendMessageToPC(GetFirstPC(), "DEBUG 1");
juste après object oTarget = GetItemActivator();
Ainsi, tu seras certain que ton objet s'est bien déclenché.
Si tu ne reçois pas le message, c'est qu'il y a une erreur soit dans le "tag" de l'objet, soit dans les propriétés.
Vérifie que le personnage tend bien les mains horizontalement devant lui en activant l'objet, aussi.
SI ton objet se déclenche bien, et que rien ne se passe, on a un problème, parce que ça devrait :)
Pour paramétrer la durée, tu mets ce que tu veux à la place du 30.0, tu peux même rendre l'effet permanent en plaçant DURATION_TYPE_PERMANENT à la place de DURATION_TYPE_TEMPORARY (et en enlever le 30.0 dans ce cas, bien sûr).
Pour annuler l'effet, le jouer fait un clic-droit sur lui et il aura accès, dans le menu radial, à la fonction "annuler le polymorphage".
Par ochimo le 25/11/2002 à 17:15:22 (#2640847)
Ca marche du top !! (j'en connais un qui va être épaté !!)
pour s'approcher de la perfection, j'ai encore deux trucs à te demander:
Le 30.0, c'est des secondes (j'ai pas chronomettré!) ?
Je viens de m'apercevoir qu'il existe une forme de werecat, est il possible d'avoir acces à ces deux formes (au choix) grace au même objet ?
Encore merci pour tes réponses en temps réel !!
OCHIMO:merci:
Par coolstar le 25/11/2002 à 17:22:03 (#2640911)
en haut ?
Par ochimo le 25/11/2002 à 17:53:58 (#2641201)
Explique moi si je me trompe.
Ochimo
PS: c'est cool de trouver des joueurs comme ça dispo un lundi après midi...
Par coolstar le 25/11/2002 à 18:11:47 (#2641408)
Hummm... A ma manière ma proposition est la même chose que celle miriandel... (encore que je n'ai pas saisi son emploi insistant des if/else ? :D)
Et pour ce qui est des "Utilisations Multiples" c vrai que ça n'est pas lié à ta dernière question là... (mais c toujours utile en définitive! ;) )
Quoi qu'il en soit... ce que je voulais signifier en te Renvoyant à la Lecture du Fil, c que ta solution pour proposer une alternative dans le choix de la Transformation se trouve dans le Déclenchement d'un Dial... c qui est aussi compris dans le Script que j'ai proposé!! (à toi de faire ta sauce ensuite avec celui de miriandel si tu veux! :p)
...
:merci:
JOL Archives 1.0.1
@ JOL / JeuxOnLine