Archives des forums MMO/MMORPG > Neverwinter Nights > NWN - Maskado > Respawn apres la mort du PC
Respawn apres la mort du PC
Par Aspion le 18/11/2002 à 23:40:39 (#2590777)
Comment créer un objet qui permet de se binder à la Everquest lorsque il est utilisé.
Ce script se met dans lévènement OnActivateItem du module.
void main()
{
object item = GetItemActivated();
if (GetTag(item) == "AMULETOFBINDING") {
object pc = GetItemActivator();
location loc = GetLocation(pc); // la je vais mettre un way point pour la location
// garde le lieu du bind
SetLocalLocation(item, "BINDPOINT", loc);
// flag pour indiquer que lobjet a été utilisé
SetLocalInt(item, "USED", 1);
// joue un effet visuel, vous pouvez changer la variable VFX_FNF_SUMMON_MONSTER_2 par une autre valeur pour avoir un effet visuel différent
ApplyEffectAtLocation(DURATION_TYPE_INSTANT, EffectVisualEffect(VFX_FNF_SUMMON_MONSTER_2), loc);
}
}
J'aimerai pouvoir faire que ce soit en parlant a un NPC que le Bind change !
Comment faire svp !
Merci d'avance :)
Par eMRaistlin le 19/11/2002 à 11:54:30 (#2592991)
Toutefois attention, pour une raison qui m'echappe, ton script fais un Bind sur l'item, et pas sur le PC (SetLocalLocation(item, "BINDPOINT", loc);)
J'aurait plutot mis ca : SetLocalLocation(pc , "BINDPOINT",loc);, mais bon,c'est pas vraiment grave.
Ce qui est embettant, c'est que le wizard lui va affecter la variable sur le PC. Donc, une fois que tu aura fais ton script via le wizard de conversation, ouvre le script editor, et repere le
SetLocalInt(XXX,"BINDPOINT",Loc); et remplace les XXX par GetPCSpeaker() =>>
SetLocalInt(GetPCSpeaker(),"BINDPOINT",Loc);
en esperant avoir été clair. ^^
Par Aspion le 19/11/2002 à 18:41:39 (#2596059)
:merci: :merci: :merci:
Nouveau pb
Par Aspion le 19/11/2002 à 20:09:31 (#2596799)
void main()
{
object PJ = GetLastPlayerDied();
int mort =GetLocalInt(PJ, "sanctuairepc");
if (mort = 0)
{
AssignCommand (PJ, ClearAllActions());
AssignCommand(PJ, JumpToObject(GetWaypointByTag("MortLH")));
SendMessageToPC(GetFirstPC(), "Votre pierre de destinee , vous teleporte avant le coup fatale !");
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), PJ);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(PJ)), PJ);
RemoveEffects(PJ);
ApplyPenalty(PJ);
}
if (mort = 1)
{
AssignCommand (PJ, ClearAllActions());
AssignCommand(PJ, JumpToObject(GetWaypointByTag("MortWH")));
SendMessageToPC(GetFirstPC(), "Votre pierre de destinee , vous teleporte avant le coup fatale !");
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), PJ);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(PJ)), PJ);
RemoveEffects(PJ);
ApplyPenalty(PJ);
}
if (mort = 2)
{
AssignCommand (PJ, ClearAllActions());
AssignCommand(PJ, JumpToObject(GetWaypointByTag("SanctuaireLH")));
SendMessageToPC(GetFirstPC(), "Votre pierre de destinee , vous teleporte avant le coup fatale !");
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), PJ);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(PJ)), PJ);
RemoveEffects(PJ);
ApplyPenalty(PJ);
}
}
Quelque soit la valeur de : "sanctuairepc"
et quelque soit le nombre de if que je met , c'est toujours le dernier if qui est valide , donc j'arrive pas vraiment ou je désire
Ai je commis une erreur dans le script ?
Par eMRaistlin le 19/11/2002 à 22:41:56 (#2597946)
Quoique .. ^^:) :p
Par coolstar le 19/11/2002 à 23:37:26 (#2598334)
Par Tynril le 20/11/2002 à 0:12:49 (#2598549)
- Déjà, il existe à ma connaissance deux projets sur l'univers T4C, dont un qui m'emploie (Althea, pour ne pas le nommer). Quel utilité d'en créer encore un ?
- Ensuite "Votre pierre de destinee , vous teleporte avant le coup fatale !" s'écrit "Votre Pierre de Destinée vous téléporte avant le coup fatal !"
- GetLocalInt(PJ, "sanctuairepc"); n'est pas une bonne technique de stockage. Les variables stockées sur un joueur sont toutes détruites à la déconnection.
- Finalement, = est un opérateur d'assignation, et retourne toujours VRAI en NWScript (En C, il retourne FAUX si l'assignation échoue, par exemple en cas de modification de constante). L'opérateur de comparaison "Est égal" est ==.
Par Jedaï le 20/11/2002 à 20:13:04 (#2605737)
void main()
{
object oPJ = GetLastPlayerDied();
string sMort = GetLocalString(PJ, "sanctuairepc");
if (sMort != ")
{
AssignCommand (oPJ, ClearAllActions());
AssignCommand(oPJ, JumpToObject(GetWaypointByTag(sMort)));
SendMessageToPC(oPJ, "Votre pierre de destinée vous téléporte avant le coup fatal !");
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectResurrection(), oPJ);
ApplyEffectToObject(DURATION_TYPE_INSTANT, EffectHeal(GetMaxHitPoints(oPJ)), oPJ);
RemoveEffects(oPJ);
ApplyPenalty(oPJ);
}
}
Voilà, et remplace ta variable sanctuaire par une string (vu son nom elle ne sert que pour ce script, non ?), c'est mieux !:cool:
Par Aspion le 20/11/2002 à 22:07:17 (#2606884)
Par Iridian le 21/11/2002 à 13:49:29 (#2611277)
Provient du message de Tynril
- GetLocalInt(PJ, "sanctuairepc"); n'est pas une bonne technique de stockage. Les variables stockées sur un joueur sont toutes détruites à la déconnection.
As tu une meilleure technique a proposer ?
Il y a deja un post qui parle de 2 programmes qui permettent de pallier a ce defaut du jeu, mais si tu as une 3e vision, je suis preneur !
Par Tynril le 21/11/2002 à 15:19:56 (#2611867)
Gestion des flags en duo avec PWUM par Tynril
Parser Web pour PWUM par Tynril
Tu te demandes encore avec quoi je travaille ? :p
Par Iridian le 21/11/2002 à 15:54:06 (#2612092)
Cependant, j'aurai quelques question supplémentaire a propos du parser web :
-Est-il indispensable ?
-Si oui dans quel cas ?
Si tu pouvais (pour les débutant comme moi :o ) résumer le fonctionnement de PWUM + Parser, ce serai génial !
Un résumé dans le genre qui expliquerai ce qu'il se passe a la connection, a la déconnection, dans le jeux et hors jeux.
Merci d'avance (a toi ou un autre éclairé)
Par eMRaistlin le 21/11/2002 à 16:05:48 (#2612175)
(merci ^^)
:D :rolleyes: :D
Par Tynril le 21/11/2002 à 16:53:36 (#2612543)
JOL Archives 1.0.1
@ JOL / JeuxOnLine