Forum pour réunir les administrateurs de serveur L2
 
AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  GroupesGroupes  Connexion  

Partagez | 
 

 Ouvrir une porte dans une instance differente de 0

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Ouvrir une porte dans une instance differente de 0   Dim 19 Oct 2008, 13:12

Bonjour l2jfr!

Dans un esprit de mettre en place les instance sur mon serveur, tel que Dark Cloud Mansion, instance Fortress et autre Coral's Garden j'ai commencé l'ajout de commande Quest.

Effectivement, on ne peux lancer les instance que via les commandes admin pour le moment, du moin sur L2jfree. Alors pas très pratique quand les joueurs veulent faire les instances toutes les 20 minute... Bon, hop, direction quest.java, et j'ai rajouté "addDungeon, setDungeon, delDungeon, checkDungeon", comme ça les script de quete peuvent créer les instances et y placer les joueurs qui désirent y participer.

Jusque là tout va bien. Le spawn de mob via le jython dans l'instance fonctionne aussi, un simple ajout dans quest.java et c'est bon. Les portes fonctionnent aussi, il suffit de les definir dans le xml de l'instance et elles sont targetables. Seul soucis, bein disons pour l'instance de Dark Cloud Mansion, les portes s'ouvrent lorsque certaines conditions sont remplie, du genre vider la salle de ses mobs et paf la porte numéro 3 s'ouvre.

C'est bien mais seulement une commande "DoorTable.getInstance().getDoor(24230001).openMe()" dans le script de la quete a pour effet d'ouvrir la porte "24230001" du monde 0 et pas celle de l'instance...

Alors ma question est simple, tout en sachant que lorsque le xml de l'instance est chargé (par un //createinstance ou ma commande de quete "st.addDungeon("DarkCloudMansion.xml,2)" les portes sont parsées est ajoutée avec un numero d'instance "newdoor.setInstanceId(getId());", comment faire pour ouvrir cette porte ensuite via mon script?

L'idée serait un "DoorTable.getInstance().getDoor(24230001,instanceId).openMe()" mais en fouillant L2DoorInstance, DoorTable et AdminDoorControl.java je n'ai rien trouvé pour influencé sur le monde. Oui il faut un rajout mais je ne voit pas comment faire, du fait que la porte à la meme ID dans le monde 0 que dans les instances. Seul son objectId varie

Merci aux personnes qui ont pris le temps de me lire et à ceux qui tenteront de m'aider!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Jules



Nombre de messages : 385
Localisation : Rome
Date d'inscription : 11/04/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Dim 19 Oct 2008, 15:30

Y'aurais plutôt un DoorTable.getInstance(instanceId).getDoor(24230001).openMe() ?
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://l2jfr.jeun.fr/search.forum
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Dim 19 Oct 2008, 15:43

Non malheureusement ça marche pas ça. =>

"getInstance(): expected 0args; got 1"
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Grimly



Nombre de messages : 601
Date d'inscription : 30/08/2007

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Dim 19 Oct 2008, 18:06

Je suis au regret que deux portes NE PEUVENT PAS avoir deux fois la même ID. Si tel est le cas, il y a de la magie dans votre serveur qui fait qu'il n'a pas crashé.

DoorTable.getInstance() => Donne la table des portes

.getDoor(24230001) => donne LA porte dont l'ID est 24230001

.openMe() => Demande l'ouverture de la porte.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Dim 19 Oct 2008, 18:36

Ha mais je te crois y'a pas de soucis, mais seulement voilà, dans ce cas je comprend pas...

Je prend GM1 je vais dans Dark Cloud Mansion, je me //setinstance 1. Shift click la porte, ID 24230001

Je prend GM2 je vais dans Dark Cloud Mansion, je reste dans le monde 0. Shift click la porte, ID 24230001 aussi.

Biensur que l'ObjectId change mais pas le doorId... Et cele s'explique peut etre en controlant le parsing des portes d'instance:

Code:

               if ("door".equalsIgnoreCase(d.getNodeName()))
               {
                  doorId = Integer.parseInt(d.getAttributes().getNamedItem("doorId").getNodeValue());
                  L2DoorInstance temp = DoorTable.getInstance().getDoor(doorId);
                  L2DoorInstance newdoor = new L2DoorInstance(IdFactory.getInstance().getNextId(), temp.getTemplate(), temp.getDoorId(), temp.getName(),
                        temp.isUnlockable());
                  newdoor.setInstanceId(getId());
                  newdoor.setPos(temp.getPos());
                  try
                  {
                     newdoor.setMapRegion(MapRegionManager.getInstance().getRegion(temp.getX(), temp.getY(), temp.getZ()));
                  }
                  catch (Exception e)
                  {
                     _log.fatal("Error in door data, ID:" + temp.getDoorId());
                  }
                  newdoor.getStatus().setCurrentHpMp(newdoor.getMaxHp(), newdoor.getMaxMp());
                  newdoor.setOpen(1);
                  newdoor.getPosition().setXYZInvisible(temp.getX(), temp.getY(), temp.getZ());
                  newdoor.spawnMe(newdoor.getX(), newdoor.getY(), newdoor.getZ());

                  _doors.add(newdoor);
               }

Ici: L2DoorInstance temp = DoorTable.getInstance().getDoor(doorId);
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Grimly



Nombre de messages : 601
Date d'inscription : 30/08/2007

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Dim 19 Oct 2008, 18:42

Citation :
Bien sur que l'ObjectId change mais pas le doorId

Oula !
Ils ont inventés la magie en java ?
Tout est fait pour qu'une seule ID corresponde à une unique porte.

Prenez l'ID comme une adresse (avec différenciation des "bis/ter") et la porte comme une maison.

Vous imaginez la galère à la poste si deux maisons avaient la même adresse pour deux maisons différentes ?
Le serveur est pareil que la poste si ce n'est pire.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Dim 19 Oct 2008, 18:54

Bein si on se projete dans le future et qu'on imagine qu'un jour on aura droit à des mondes paralelles, oui, la maison existera dans tous les mondes paralelle est auront a chaque fois la meme adresse, sauf que dans l'adresse on devrait specifier en plus la maison de quel monde on veux... Et c'est bien ça le système d'instance... Un meme endroit ou les joueurs peuvent aller en meme temps sans pour autant se voir ni interferer

Donc les porte ont le meme doorId, à mon grand desarois, un objectId different, mais .openMe() ouvre la porte 24230001 de l'univers 0 par défaut...
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Mar 21 Oct 2008, 10:25

Quelqu'un a une solution a mon soucis d'ouverture de porte via jython en Instance? S'il faut des screens des doorId j'ai tout prévu déjà, suffit de demander
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Grimly



Nombre de messages : 601
Date d'inscription : 30/08/2007

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Mar 21 Oct 2008, 12:28

Il y a bien une solution mais impossible par jython.

((L2DoorInstance)L2World.getObjectById(ton_id)).openMe() ou qqch du genre.
Le cast n'existe pas avec jython.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Mar 21 Oct 2008, 14:30

Bein c'est bien ce que je veux, je dois refaire les handler pour quest dans le core, mais le soucis je ne sais pas comment agir sur les portes d'instances dans doorInstance.java... Après, rajouter une commande sur Quest.java genre "openDungeonDoor(id,instanceId)" ça je me debrouille c'est pas complexe


Mais ton "((L2DoorInstance)L2World.getObjectById(24230001)).openMe()" va agir sur la porte 24230001 de l'instance 0 non? C'est ça le soucis je doit recup les porte de l'instance souhaitée. Genre les joueurs sont en instance 47, je demande l'ouverture de la porte 24230001 de l'instance 47 et pas les autres...

Bref, je crois que leur système aurait jamais du être nommé instance, ça embrouille un max. Appellons ça plutot Instanced Dungeon ou plutot Donjon tout simple.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Grimly



Nombre de messages : 601
Date d'inscription : 30/08/2007

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Mar 21 Oct 2008, 14:54

Alors, la bonne commande serais :

((L2DoorInstance)L2World.getInstance().findObject(id)).openMe();

où "id" est l'objectId de ta porte et non le doorId s'ils sont bien différents (j'ai pas regardé.

Aucun objet ne peux avoir de doublon dans L2World, sinon, c'est qu'il n'existe pas.

Je suppose ici que les objectId sont fixes suivant les objets (je ne suis vraiment pas sur de cette hypothèse)

Je ne peux pas faire mieux dans l'immédiat, je travaille sur le login server en ce moment.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Mar 21 Oct 2008, 15:05

L'objectId est différent a chaque nouvelle instance en fait, puisque il peux en avoir jusqu'à 30K.

Vais tester de faire un truc du style et je donnerai des nouvelles directement si j'arrive ou pas à quelque chose. Merci et bonne chance pour ton login server!
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Grimly



Nombre de messages : 601
Date d'inscription : 30/08/2007

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Mar 21 Oct 2008, 18:55

Psychokiller1888 a écrit:
L'objectId est différent a chaque nouvelle instance en fait, puisque il peux en avoir jusqu'à 30K.

Vais tester de faire un truc du style et je donnerai des nouvelles directement si j'arrive ou pas à quelque chose. Merci et bonne chance pour ton login server!

Tu ne m'a pas compris ?
Citation :
L'objectId est différent
C'est ce que je te demande d'utiliser !
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Psychokiller1888



Nombre de messages : 114
Age : 32
Localisation : Suisse
Date d'inscription : 24/02/2008

MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Mar 21 Oct 2008, 19:07

Si si je t'ai compris, mais modifié mon message trop vite peut etre... Les ObjectId sont de toute facon differents c'est normal.

Je demantais uniquement le fait qu'ils sont fixes, me suis mal exprimé pardon
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: Ouvrir une porte dans une instance differente de 0   Aujourd'hui à 00:14

Revenir en haut Aller en bas
 
Ouvrir une porte dans une instance differente de 0
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Résolu] Ouvrir un lien dans une nouvelle page.
» demande bb code pour ouvrir 1 lien dans nouvel onglet
» résolut Lien pour ouvrir une page dans une "iframe&amp
» Ouvrir un fichier dans Mapsource sans effacer les données en cours?
» Liens inactifs dans Outlook Express

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
L2J-FR :: Général :: Aides et Conseils-
Sauter vers: