Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > pouvoir un peu special
pouvoir un peu special
Par Iridian le 16/11/2002 à 16:04:01 (#2575432)
Un peu comme un sort de régénération mais en beaucoup moins puissant (genre 1-3 pv tous les 3-4 round).
En plus, pour ne pas faire simple, je voudrais que ce pouvoir ne soit activable que lorsque le PC possède 2 objets (objet A : le déclencheur, objet B : un catalyseur).
Je sais déjà qu'il me faudra utiliser le onActivateItem du module, j'y placerai le script de condition qui teste la présence des 2 objets.
Par contre pour répéter l'effet a intervalles réguliers, je ne sais pas comment m'y prendre.
J'ai pensé a une variable testé dans le onHeartBeat du PC mais :
-Je ne sais pas comment l'y mettre
-J'ai peur que ça bouffe trop de ressources (j'ai 4-5 objets qui fonctionnerons sur ce principe).
Les questions :
-y a t'il un autre moyen de faire ce genre de chose ?
-si j'applique ma méthode, es-ce viable au niveau ressources ?
-avez-vous des conseils a me donner ?
Merci d'avance
Par LeProctophantasmiste le 16/11/2002 à 16:30:18 (#2575538)
onHeartBeat du PC
Ben surtout les PJs n'ont pas de OnHeartBeat, le seul moyen donc c'est via des appels récursifs (i.e: un script ou une fonction qui s'appelle soi-même, par ExecuteScript dans le cas du script, à intervalle régulier). Franchement tu va avoir du mal à faire un truc très propre... Qu'en est-il quand le PJ n'a plus l'objet sur lui...
Par Frolo Xeres le 16/11/2002 à 18:18:27 (#2576119)
Vient du message du Le Procto
des appels recursifs
Si tu veux lui bouffer ses ressources je pense qu'y a pas pire... Surtout sur plusieurs minutes...
Un empilement toute les milisecondes ou presque et en deux secondes, tu flambes tes 256 Mo de RAM !
N'est-il pas possible de poser une variable avec le nom du PC qui détiens l'objet sur le module - Avec un SetLocalInt sur onAcqiredObject et onUnacqiredObject. Un userDefined qui se lance toutes les x secondes si la variable est value... Parcours des PC pour trouver celui qui a le nom concerné... Et ApplyEffectOnObject( EFFECT_HEAL ) ou du genre ?
C'est juste une suggestion et les noms de fonctions sont pas exacts ni les parametres !
Par Jedaï le 16/11/2002 à 21:45:51 (#2577130)
//A mettre sur le OnActivateItem
void main()
{
object oItem = GetItemActivated();
object oPC = GetItemActivator();
if (GetTag(oItem) == "Tag_De_L_Objet_Activateur")
{
if (GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_2e_objet"))
&& GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_3e_objet")))
{
effect eRegen = EffectRegenerate(2, 18.0);
ApplyEffectToObject(DURATION_TYPE_PERMANENT, eRegen, oPC);
}
}
}
//A mettre sur le OnUnAcquiredItem
void StopRegenProcess(object oPJ)
{
effect e = GetFirstEffect(oPJ);
while (GetIsEffectValid(e))
{
if (GetEffectType(e) == EFFECT_TYPE_REGENERATE)
RemoveEffect(oPJ, e);
e = GetNextEffect(oPJ);
}
}
void main()
{
object oItem = GetModuleItemLost();
object oPC = GetModuleItemLostBy();
if (GetIsPC(oPC))
{
//perte du 1er objet ?
if (GetTag(oItem) == "Tag_Du_1er_objet")
{
if (GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_2e_objet"))
&& GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_3e_objet")))
{
StopRegenProcess(oPC);
}
}
//perte du 2e objet ?
else if (GetTag(oItem) == "Tag_Du_2e_objet")
{
if (GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_1er_objet"))
&& GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_3e_objet")))
{
StopRegenProcess(oPC);
}
}
//perte du 3e objet ?
else if (GetTag(oItem) == "Tag_Du_3e_objet")
{
if (GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_1er_objet"))
&& GetIsObjectValid(GetItemPossessedBy(oPC, "Tag_Du_2e_objet")))
{
StopRegenProcess(oPC);
}
}
}
}
Voilà, c'est assez imprécis mais bon....ça devrait marcher !:cool:
Par Iridian le 16/11/2002 à 23:16:50 (#2577419)
Encore merci, petit a petit grace a vous tous je progresse !
JOL Archives 1.0.1
@ JOL / JeuxOnLine