Bienvenue sur JeuxOnLine - MMO, MMORPG et MOBA !
Les sites de JeuxOnLine...
 

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

Comment recupérer une location ?

Par Morethil le 12/11/2002 à 13:13:17 (#2543607)

J'imagine que c'est une question basique, mais il semble que quelque chose ne va pas dans mon scripte.

Voilà ce que j'ai posé (c'est juste un bout) :


object oPC = GetPCSpeaker();
object oArrive = GetObjectByTag ("wpt_arrive", 0);
location lArrive = GetLocation (oArrive);

//ici j'ai placé un effet sur le PJ, d'où le delay.

DelayCommand(2.0,AssignCommand(oPC, ActionJumpToLocation(lArrive)));


Le reste du scripte fonctionne.

Edit : J'ai oublié de preciser que l'arrivé est dans une zone differente du point de départ...

Par mobidique le 12/11/2002 à 13:19:06 (#2543680)

J'ai fait ce genre de chose dans trashcity1 avec un JumpToObject ça marche nickel ... réutilisé dans trashcity2 avec moins de bonheur un perso assis n'a pas été téléporté. C'est peut être ton effet qui met la mouise ?

Par eMRaistlin le 12/11/2002 à 13:29:06 (#2543826)

Bien entendu, je suppose que :

- GetPCSpeaker();>> Tu as mis cela dans une conversation.

- GetObjectByTag ("wpt_arrive", 0); >> il n'y a qu'un seul et unique objet avec ce tag ? (de plus, syntaxiquement, tu ne gagne rien a rajouter le 0


Ah.. Au fait...


DANS UNE CONVERSATION, IL Y A UN ClearAllAction A LA FIN DE LA CONVERSATION PAR DEFAUT !!


Faites un peu gaffe, les gars ^^


(ouff... j'y ait pensé juste a temps... :mdr: :mdr: )

Par Morethil le 12/11/2002 à 14:59:46 (#2544599)

Ce n'est pas ça eMRaistlin, j'ai configuré la conversation pour ne pas avoir ce clear all action (a priori) d'autant que j'ai un effet avant, et un autre après, et que les 2 fonctionnent.
Je pense que c'est mon effet d'avant qui fait rater le saut.

Spoiler
------
Le saut se produit après la mort du PJ. Et non, l'option de respawn ne marche pas.
L'effet d'avant est EffectDeath (qui marche) et l'effet d'après est EffectResurrect, qui marche aussi. Le probleme c'est que entre les 2 le PJ est censé changer de zone, et ce n'est pas le cas...

Si vous voyez des solutions.

MRaistlin -- >
Oui, c'est dans une conversation en action conscéquente, sur la dernière phrase du PJ, donc une [fin du dialogue] normal.

Par eMRaistlin le 12/11/2002 à 15:07:52 (#2544660)

Arff... ton PC est mort, et tu lui demande une ActionJump ??? tu pourrais pas essayer avec jumpToLocation directement, juste histoire de voir si c'est le fait que le PC soit mort qui l'empeche de faire des actions ?

Par Morethil le 12/11/2002 à 16:29:27 (#2545190)

Provient du message de eMRaistlin
Arff... ton PC est mort, et tu lui demande une ActionJump ??? tu pourrais pas essayer avec jumpToLocation directement, juste histoire de voir si c'est le fait que le PC soit mort qui l'empeche de faire des actions ?


J'ai testé, ça ne marche pas. En plus il y a l'ecran de respawn qui arrive par dessus, ça aide pas...

Par eMRaistlin le 12/11/2002 à 16:34:03 (#2545225)

En plus il y a l'ecran de respawn qui arrive par dessus, ça aide pas...


Euh... y'a l'ecran de spawn ?


Je veux dire, tu as essayé ca :


object oPC = GetPCSpeaker();
object oArrive = GetObjectByTag ("wpt_arrive", 0);
location lArrive = GetLocation (oArrive);

//ici j'ai placé un effet sur le PJ, d'où le delay.

DelayCommand(2.0,AssignCommand(oPC, JumpToLocation(lArrive)));


[EDIT]
Euh, au fait, il doit y avoir aussi un ClearAllActions sur le OnPCDeath ^^

Par Morethil le 12/11/2002 à 17:06:08 (#2545447)

Euh... y'a l'ecran de spawn ?

Euu, oui, le truc qui s'affiche quand on meurt. C'est chiant d'ailleurs...


Je veux dire, tu as essayé ca :


DelayCommand(2.0,AssignCommand(oPC, JumpToLocation(lArrive)));


Oui, c'est bien ça que j'ai essayé.

[EDIT]
Euh, au fait, il doit y avoir aussi un ClearAllActions sur le OnPCDeath ^^

C'est possible... Bon, je vais voir ça plus tard. Mais comme le disait Mobi, si ça marche pas sur un PJ assis, je pense que c'est plutôt due a la position du PJ. (couché) lorsqu'il meurt.

Merci de votre aide en tous cas, je repost ici plus tard si une idée me viens.

Par eMRaistlin le 12/11/2002 à 17:10:26 (#2545479)

je repost ici plus tard si une idée me viens.


Pardon... j'avais perdu de vue qu'il y avait une demande a ce niveau la... excuse moi ^^


Le plus simple, c'est de mettre le JumpToLocation dans le OnPcRespawn... ca ira mieux ^^

Par LeProctophantasmiste le 12/11/2002 à 17:28:25 (#2545644)


En plus il y a l'ecran de respawn qui arrive par dessus, ça aide pas...


Ca tu peux le déactiver dans le OnDeath, c'est cette ligne qui le provoque:

DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH));

J'ai à peu près la même chose dans un module, mais cela fait un moment que je l'ai fait, l'histoire de JumpToLocation qui ne marche pas sur un mort me dit quelque chose.

Mais de toute façon Bio a ajouté une nouvelle constante d'animation dans la 1.26: ANIMATION_LOOPING_DEAD_FRONT
je viens d'essayer cela et ça marche:

void main()
{
object oPC = GetLastUsedBy();
AssignCommand(oPC,PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,6.0));
AssignCommand(oPC,DelayCommand(2.0,JumpToLocation(GetLocation(GetWaypointByTag("WP_DEATH")))));
}

le seul soucis c'est que l'animation est réappliquée au PJ après le jump (il se retrouve debout et s'effondre), et cela peut être visible malgré une area transition dans certaines circonstances.

Par Morethil le 12/11/2002 à 21:50:39 (#2547798)

Provient du message de LeProctophantasmiste
Ca tu peux le déactiver dans le OnDeath, c'est cette ligne qui le provoque:


DelayCommand(2.5, PopUpGUIPanel(oPlayer,GUI_PANEL_PLAYER_DEATH));



Le probleme c'est que je ne voudrait effacer cette apparition d'écran que pour cette mort là.
Pareil pour le OnRespawn. Comme ça affecte le module entier ça ne me va pas.
Je sait, je suis chiant... :rasta:

J'ai à peu près la même chose dans un module, mais cela fait un moment que je l'ai fait, l'histoire de JumpToLocation qui ne marche pas sur un mort me dit quelque chose.


Mais de toute façon Bio a ajouté une nouvelle constante d'animation dans la 1.26: ANIMATION_LOOPING_DEAD_FRONT
je viens d'essayer cela et ça marche:

void main()
{
object oPC = GetLastUsedBy();
AssignCommand(oPC,PlayAnimation(ANIMATION_LOOPING_DEAD_FRONT,1.0,6.0));
AssignCommand(oPC,DelayCommand(2.0,JumpToLocation(GetLocation(GetWaypointByTag("WP_DEATH")))));
}

le seul soucis c'est que l'animation est réappliquée au PJ après le jump (il se retrouve debout et s'effondre), et cela peut être visible malgré une area transition dans certaines circonstances.

Je vais essayer ça quand même. De toutes façon le but c'est que les PJ comprennent ce qu'il se passe. Dans mon module c'est plus une histoire "de look" que d'effet réel.
Cela dit c'est quand même chiant ;)

Ps Pour eMRaistlin : Y'avait pas de demande précise, au depart je pensait que c'etait un pbm de location. Donc pas de probleme ;)

Par eMRaistlin le 12/11/2002 à 22:59:52 (#2548263)

Le probleme c'est que je ne voudrait effacer cette apparition d'écran que pour cette mort là.


Ben... tu met des condition dans le OnPLayerDeath pour qu'il affecte une variable au PC si c'est la mort "speciale", et dans le OnRespawn, tu verifie que cette variable est pas remplie. Si elle l'est, tu la vide, tu ne fais pas le PopUp, et tu Jump, et si ca ne l'est pas, alors PoPUp et respawn normal...

Easy, no ?

Par Morethil le 13/11/2002 à 1:50:59 (#2549143)

Provient du message de eMRaistlin
Ben... tu met des condition dans le OnPLayerDeath pour qu'il affecte une variable au PC si c'est la mort "speciale", et dans le OnRespawn, tu verifie que cette variable est pas remplie. Si elle l'est, tu la vide, tu ne fais pas le PopUp, et tu Jump, et si ca ne l'est pas, alors PoPUp et respawn normal...

Easy, no ?


Si il y a un moyen d'enlever une variable, ou de faire passer une variable de 0 à 1, puis de 1 à 0 a volonté, c'est faisable. Si y'a pas moyen... C'est plus chaud. Le PC a interet a pas faire l'imbecile apres :p

Par eMRaistlin le 13/11/2002 à 9:43:40 (#2549960)

Si il y a un moyen d'enlever une variable, ou de faire passer une variable de 0 à 1, puis de 1 à 0 a volonté, c'est faisable


Tout a fait :

GetLocalInt(object oPC,string "sNOM");

&&

SetLocalInt(object oPC,string "sNOM",int nValeur);

Par Morethil le 13/11/2002 à 12:20:23 (#2551021)

Provient du message de eMRaistlin
Tout a fait :

GetLocalInt(object oPC,string "sNOM");

&&

SetLocalInt(object oPC,string "sNOM",int nValeur);


Oui, mais ça c'est pour prendre une valeure locale, ou pour la valider.
Si j'utilise ça pour ce popup, je vais faire ce qui suit :

Dans le scripte OnDeath (du module) je vais modifier la ligne avant le pop up avec un if.

if (nNom==1)
{Fait pas de pop up } Else {Fait le pop up}

Et dans mon scripte je vais inclure SetLocalInt, 1 avant la mort SetLocalInt (oPC, "nNom", 1);
et 1 une fois le PJ ramené a la vie par d'autres moyens
SetLocalInt (oPC, "nNom, 0);

Ce que je me demande c'est si je pourrait refaire un SetLocalInt (oPC, "nNom", 1) plus tard ? et ainsi de suite, revenir a 0, puis a 1, etc.

Et si je doit inverser le conditionnel if (nNom==0) fait le pop up, etc.
Est ce que 0 est la valeur par defaut de tous les LocalInt, ou faut il au début du module que le faire passer à 0 pour tous les PJ ?

Par eMRaistlin le 13/11/2002 à 12:29:19 (#2551082)

Lorsque tu load un module, aucune variable n'existe.

Si tu appele une variable qui n'est pas renseigné, le script la "créé" et lui donne une valeur 0 (mais elle n'existe toujours pas en tant que telle).

Une fois que tu lui donne la valeur 1, elle va rester a 1 jusqu'au prochain shut-down du module, ou bien jusqu'a ce que tu lui affecte 0 a la main (SetLocalInt(oPC,"Variable",0);

Ce que je te proposait, c'est exactement ce dont tu parle dans la 1ere partie du message, avec l'ajout du Set à 0 apres le jump.

Par Morethil le 13/11/2002 à 13:02:59 (#2551378)

oki, ben merci pour les infos, Ca resoudra deja ce truc là :) et puis ça va aussi m'être util pour les henchmen.

Par LeProctophantasmiste le 13/11/2002 à 13:09:44 (#2551446)

Si tu veux la ramener à zéro définitivement utilise DeleteLocalInt. Si tu comptes rechanger la valeur SetLocalInt....
Tu n'obtiendra pas de meilleur résultat, à mon avis, en tuant le PJ qu'en utilisant l'animation, étant donné que cela revient probablement au même.

JOL Archives 1.0.1
@ JOL / JeuxOnLine