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

Panneau de contrôle

Recherche | Retour aux forums

JOL Archives

portail crée a la mort d'un monstre

Par Ronce-iris le 26/11/2002 à 15:46:43 (#2648309)

J'ai un petit soucis de portail qui n'appairait pas alors que je lai bien scripté.
Le monstre meurt et rien ne se passe.
Si quelqu'un a une idée.
:)

Par eMRaistlin le 26/11/2002 à 16:53:09 (#2648889)

ce qui serait plus pratique, c'est que tu nous ecrive ton script ici ^^

dans ta boite aux lettres

Par Blam le 26/11/2002 à 17:09:31 (#2649069)

c'est l'adresse d'un mini module.
des que le gob est mort un portail s'ouvre e tu peux y passer

c'est simple
1-script dans le ondeath du gob
2-portail créee dans l'éditeur (personnalisé) et script dans le portail
3-waypoint de l'endroit ou se crée le portail
4-waypoint sur l'endroit d'arrivée du portail en question.

je te souhaite une bonne lecture de tout ca.


Nb.
a) Tonton le Grognon et moi cela fait deux, tu risques de le vexer et c'est un modérateur.

b) merci pour l'inquisition..... mais bon je t'en veux pas t'es une fille :) (et moi je manque de tact et de nuances ? mmmh ?)

Par Tynril le 26/11/2002 à 18:11:59 (#2649702)

Pourquoi pas ici, Blam ? Je ne comprend pas... :doute: On t'a fait du tord ?

Pour répondre au thread :

Tu as deux façons de gérer la mort d'un monstre :
- Soit l'event OnDeath du monstre
- Soit l'event OnExhausted d'une rencontre

Le premier sert pour les monstres uniques, et se déclanche à la mort de celui-ci. On peut récupérer le monstre avec un OBJECT_SELF, et le tueur avec GetLastKiller().

Le second sert pour un groupe du monstre, et se déclanche lorsqu'ils sont tous morts. A notter qu'ils sont parfaitement combinable.

Par Jedaï le 26/11/2002 à 19:44:31 (#2650516)

Attention, les DelayCommand() ne marchent pas dans les OnDeath (le monstre est mort :D )
On peut par contre faire un AssignCommand(DelayCommand()); : ça marche:cool:

Par shadoh le 26/11/2002 à 20:16:11 (#2650753)

Par principe, lorsque tu sollicites la création d'un item à la mort d'un monstre, il est préférable de passer par un AssignCommand() comme l'a dit Jedaï.

Pour faire ce que tu veux réaliser, le mieux c'est de créer une portail personnalisé utilisable avec un script de type JumpToObject() ou JumpAtLocation() pointant vers ton tag de destination sur l'évènement onUsed de celui ci.

Sur le onDeath du monstre, tu fais un AssignCommand() pointant vers un objet invisible associé à CreatObject().

Attention, CreatObject() n'est pas considéré comme une action si mes souvenirs sont exactes. Il te faudra donc passer par un truc de ce genre :


void VoidCreateObject()
{
int nObjectType = X; // ou X correspond au type
int bUseAppearAnimation = X; // ou X correspond a TRUE ou Fzalse suivant le fait de vouloir une animation d'apparition
string sTemplate = "X"; // ou X correspond au RESREF de l'item a creer
location lLocation1 = GetLocation(GetWaypointByTag("X")); // ou X correspond au TAG de ton waypoint ou est censé etre créé ton portail

CreateObject(nObjectType,sTemplate,lLocation1,bUseAppearAnimation);
}


Puis, tu fais ton void main()

associé avec cette commande :

AssignCommand(oActionSubject, DelayCommand(X,VoidCreateObject())); // ou X correspond au "delay" en secondes sous forme 0.0

Par Simkim le 26/11/2002 à 21:23:12 (#2651211)

Euh Blam, c'est toi qui va te faire taper par un modo.

C'est Tonton le Grognon et pas Tonton le Rognon. :D

N'empêche j'aime bien ce nouveau surnom :mdr: :mdr: :mdr: .

Réponse a Tynril

Par Blam le 27/11/2002 à 9:26:00 (#2654004)

On m'a faits du tort ? mmmmmh...............Joker !!!

J'ai choisi la solution la plus efficace et la plus rapide (car vérifiée par moi meme).
1-créer l'exemple (qui marche)
2-l'expliquer (pas a pas)
3-NE PAS ETRE COURT-CIRCUITE par tout un tas de réponses sans explications. (ceci dit je vérifie aussi ce que les autre proposent car ca marche sûrement aussi)

J'ai eu l'occasion de constater que certaine explications étaient confuses ou même carrément farfelues (ce a mes dépends).

C'est une méthode, certes critiquable, mais c'est la mienne. Ce n'est absolument pas que je veuille exclure qui que ce soit, je tente moi aussi de résoudre les problème rencontrés par les newbies comme moi.

De plus c'est une réponse a Ronce-iris malgré une "réponse personnelle qui m'a déplut".

Quant a Simkim, c'est une erreur que je viens de corriger de suite, j'aime pas écorcher les noms et les surnoms (merci avais pas vu)

Par coolstar le 27/11/2002 à 10:28:55 (#2654275)

Obligé de passer par là pour créer un Objet shadoh ?? :confus:

Pour Coolstar

Par Jedaï le 27/11/2002 à 11:47:36 (#2654794)

En fait habituellement il suffit d'utiliser un CreateObject() avec les bons paramètres et ça va, mais dans le cas où l'on voudrait retarder la création de cet objet, on est obligé d'utiliser DelayCommand(). Or cette fonction (comme tous les BiduleCommand() ) n'accepte comme fonction à retarder que les fonctions qui ne renvoient rien (qui ont comme type de retour void : on ne peut pas écrire nFacing = SetFacing(120.0); par exemple), ce qui n'est pas le cas de CreateObject() !
En effet CreateObject() renvoie l'objet qu'elle vient de créer, on peut écrire :


object oNPC = CreateObject(OBJECT_TYPE_CREATURE, "leon", lCreate);

Donc on ne peut pas utiliser directement CreateObject() dans un DelayCommand(), il faut ruser et créer une "fausse" fonction qui fera exactement la même chose que CreateObject() mais ne renverra rien. C'est ce qu'a fais Shadoh :D .

Merci c'est génial

Par Ronce-iris le 27/11/2002 à 11:56:58 (#2654881)

Merci Blam cette petite démo est magnifique et les explications sont claires, nettes, et marrantes. J'aime particulièrement le dialogue du gobelin croc le Bô, on sent le lecteur de casus belli.

Shadoh tu ne réponds pas a ma question et en plus cela ne marche pas (ou j'ai pas compris comment ca marche)

Merci encore de cette solution a mon problème

Par coolstar le 27/11/2002 à 13:01:08 (#2655385)

Merci pour ton édifiante explication Jedaï! ;)



PS : Ronce-iris, shadoh t'a bien répondu mais c que tu n'as pas tout compris... :D

shadoh ca marche

Par Ronce-iris le 27/11/2002 à 14:28:05 (#2656238)

Merci pour ton explication, meme si elle n'est pas tres claire.
C'est bien de donner une solution mais je suis débutante et c'est pas facile a comprendre.
Je préfère de loin, le module explicatif avec un gobelin comme prof car ca reste simple et ludique, et en plus j'ai tout compris du premier coup.

A ce sujet Blam pourquoi tu ne le poste pas ?
( il va raler je suis sure :p )

Merci a vous deux

Par Frohnir le 27/11/2002 à 14:34:21 (#2656291)

Bah oui, ça m'intéresse aussi, c'est la rançon de la gloire, faut assumer ! :D

Par Tynril le 27/11/2002 à 15:15:08 (#2656670)

Nombre de personnes attendent les réponses des questions posées sur ce forum... Pas une seule, Blam :) Vas-tu leur envoyer un PM à chacun ?

Ben heu....

Par Blam le 27/11/2002 à 17:00:27 (#2657504)

Alors en vrac:

J'ai envoyé ca car c'etait déjà un sujet pret.
Non je ne ferait pas ca pour tout le monde.
J'avais aimé l'exemple de la forge (ya quelques mois) et j'ai decidé de faire un tutorial sous forme de scénarios pour les vrais newbies qui comme moi ont du mal a tout comprendre. Des que la série de scénario est finie je la met en ligne.
Je posterais l'adresse ici (malgres mes réticences vis a vis de quelques personnes toujours critiques).

Ai je bien répondu a vos question ?
Frohnir & tynril :)

et non je ne vous boude pas ni vous snob !!!!
suis qu'un newbie en script.

Par shadoh le 27/11/2002 à 17:20:05 (#2657657)

Si ça ne marche pas chez toi Ronce-Iris, c'est que tu as fait une erreur quelque part. Car j'utilise cette méthode sur le module que ma team est en train de réaliser :). Peut être n'ai je pas été assez clair (pourtant Jedaï a tout de suite compris lui :)).

Bon, pour te donner une exemple concret de ce que je t'ai expliqué dans mon post précédent, voici un script que j'ai réalisé afin qu'à la mort de ce monstre, une bague que j'ai créé soit dropée si le joueur rempli 2 conditions précises ( il ne doit pas déjà avoir la bague ni l'épée qui est la récompense de la quête). Puis, qu'au bout de 60 secondes, le monstre respawn à l'endroit indiqué par mon WP.

Dans ton cas, ce n'est pas un monstre que tu vas créer mais un portail. Il te suffit juste donc d'adapter quelques éléments de ce script pour tes besoins personnels (c'est pas tres compliqué quand même comme script faut pas pousser :)).


#include "nw_i0_tool"
void VoidCreateObject()
{
int nObjectType = OBJECT_TYPE_CREATURE;
int bUseAppearAnimation = TRUE;
string sTemplate = "grokouik";
location lLocation1 = GetLocation(GetWaypointByTag("wp_grokouik"));

CreateObject(nObjectType,sTemplate,lLocation1,bUseAppearAnimation);
}

void main()
{
int nObjectType2 = OBJECT_TYPE_ITEM;
string strTemplate2 = "bague_de_legnar";
location locLocation2 = GetLocation(OBJECT_SELF);
int bUseAppearAnimation2 = TRUE;
object oTarget = GetLastDamager();
object oActionSubject = GetObjectByTag("InvisibleObject");
string sItem = "crocdargent";
string sItem2 = "bague_de_legnar";


AssignCommand(oActionSubject, DelayCommand(60.0,VoidCreateObject()));
if(CheckPartyForItem(oTarget, sItem))//Verifie si le joueur a le croc d'argent
{
}
else if (CheckPartyForItem(oTarget, sItem2))//Verifie si le joueur a la bague de legnar
{
}
else
{
CreateObject(nObjectType2, strTemplate2, locLocation2, bUseAppearAnimation2);//Cree la bague de legnar la ou le monstre est mort
}
}


EDIT : petite précision, tu n'auras pas besoin d'inclure le fichier "nw_i0_tool" vu que tu n'as pas besoin de la commande CheckPartyForItem() dans ton cas ni meme besoin de la structure de contrôle.

Par Tynril le 27/11/2002 à 17:26:49 (#2657712)

Merci Blam, je comprends mieux :merci:

Par Frohnir le 28/11/2002 à 8:45:33 (#2661832)

Bah voui, on va patienter... :)

merci j'ai eu la solution

Par Ronce-iris le 28/11/2002 à 18:25:23 (#2665990)

j'ai eu une excellente réponse a mon problème.

Shadoh pas besoin de poster d'autres solutions et j'aimerai que tu ne vienne pas me pourrir un post comme tu l'a fait pour lys et son recrutement.
je t'ai deja remercie pour ton "aide" mais la je préfère nettement celle de Blam.
Et lui ne raconte pas n'importe quoi.
Retourne a tes études de droit et fiche moi la Paix !

Par Tynril le 28/11/2002 à 18:31:17 (#2666046)

J'apprécierais que l'on ne vienne pas pourrir l'excellente ambiance de Maskado avec ce genre de commentaires puériles. Shadoh, tout comme Blam, a essayé de t'aider, ce n'est pas une façon de remercier les gens.

Par coolstar le 28/11/2002 à 18:52:49 (#2666236)

:chut:

Par shadoh le 28/11/2002 à 19:31:32 (#2666574)

No comment...

Bon bah pour les autres qui auraient un problème similaire, sachez que le script fonctionne parfaitement (demandez à n'importe quel autre scripteur du forum, il le confirmera).

Par coolstar le 28/11/2002 à 19:32:06 (#2666581)

Un détail encore à propos des Scripts justement !


A quoi sert CheckPartyForItem si on peut utiliser GetItemPossessedBy ? :confus:

Et quand on n'utilise pas DelayCommand ne peut-on user de ActionWait ?? :D



PS : Encore merci à vos interventions collectives qui informent ainsi la collective communauté ! ;)

...

Par shadoh le 28/11/2002 à 19:49:54 (#2666741)

Tu peux passer par GetItemPossessedBy() aussi :). La différence c'est que la je vérifie tout un groupe de personnes et non pas une seule personne. Donc, si un des membres du groupe a déjà la bague ou l'épée, le monstre ne dropera rien.

Pour le ActionWait(), le probleme est que, placé sur le on Death d'un monstre, ça ne marche pas car la créature dissparait à sa mort :) :) :).

Par Jedaï le 28/11/2002 à 20:09:07 (#2666906)

De plus ActionWait() ne retardera pas d'une picoseconde toute fonction qui n'est pas placé automatiquement dans la file d'action (c.à d. les ActionBidule() ) bien que ce problème soit contournable par ActionDoCommand() (qui pose les mêmes problème que DelayCommand() au niveau des fonctions acceptés).
En effet ActionWait(n) ne fait rien d'autre qu'ajouter l'action Attendre n secondes à la file d'action de celui qui l'appelle.

Par eMRaistlin le 28/11/2002 à 20:17:28 (#2666994)

On a la chance de pouvoir s'exprimer librement sur des probleme technique, et donc a priori aucunement emotionnels.

Et vous savez quoi : c'est ce qu'on va faire : repondre aux questions que les gens qui ont besoin d'aide se pose. On va eviter les debats necessairement vains et on va essayer d'avancer.

Je serait pas aussi patient que LockStrike, et je rejoins l'avis de tyn' : quelque soit la raison qui vous oppose, ce n'est surement pas sur Maskado qu'il faut en discourir.

Par coolstar le 28/11/2002 à 20:42:29 (#2667170)

@ shadoh & Jedaï :cool:

@ Blam ;)

@ eMRaistlin :merci:

Bien lu et enregisté

Par Blam le 28/11/2002 à 21:26:20 (#2667515)

Ponce-iris, quand tu postes une chose ici, c'est pas uniquement pour toi, cet a dire que ça intéresse les autres aussi.
Les remerciements pour shadoh sont un peu moyens a mon gout (je condamne pas); Ce qui s'est passé ailleurs n'a rien a voir avec maskado.
Je suis pas la pour le défendre, il en a pas besoin, mais il est intéressant de voir que son script marche parfaitement et que c'est aussi une bonne solution.

En script je suis une burne, si tu as un souci et que tu ne veux pas le poster ici tu demande a Lys, elle est géniale (mate ses scripts de retour de sorts ou ceux de la barrière de lames qui se déplace avec la cible).

Bon ben c'est pas tout ça, j'ai un scénario en construction, sur le feu.

Bon courage a tous et merci a ceux qui apportent une solution.

JOL Archives 1.0.1
@ JOL / JeuxOnLine