| Ouvrir une porte dans une instance differente de 0 | |
|
|
Auteur | Message |
---|
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Ouvrir une porte dans une instance differente de 0 19/10/08, 12:12 pm | |
| 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! | |
|
| |
Jules
Nombre de messages : 384 Localisation : Rome Date d'inscription : 11/04/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 19/10/08, 02:30 pm | |
| Y'aurais plutôt un DoorTable.getInstance(instanceId).getDoor(24230001).openMe() ? | |
|
| |
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 19/10/08, 02:43 pm | |
| Non malheureusement ça marche pas ça. =>
"getInstance(): expected 0args; got 1" | |
|
| |
Grimly
Nombre de messages : 601 Date d'inscription : 30/08/2007
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 19/10/08, 05:06 pm | |
| 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. | |
|
| |
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 19/10/08, 05:36 pm | |
| 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); | |
|
| |
Grimly
Nombre de messages : 601 Date d'inscription : 30/08/2007
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 19/10/08, 05:42 pm | |
| - 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. | |
|
| |
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 19/10/08, 05:54 pm | |
| 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... | |
|
| |
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 21/10/08, 09:25 am | |
| 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 | |
|
| |
Grimly
Nombre de messages : 601 Date d'inscription : 30/08/2007
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 21/10/08, 11:28 am | |
| 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. | |
|
| |
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 21/10/08, 01:30 pm | |
| 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. | |
|
| |
Grimly
Nombre de messages : 601 Date d'inscription : 30/08/2007
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 21/10/08, 01:54 pm | |
| 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. | |
|
| |
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 21/10/08, 02:05 pm | |
| 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! | |
|
| |
Grimly
Nombre de messages : 601 Date d'inscription : 30/08/2007
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 21/10/08, 05:55 pm | |
| - 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 ! | |
|
| |
Psychokiller1888
Nombre de messages : 114 Age : 40 Localisation : Suisse Date d'inscription : 24/02/2008
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 21/10/08, 06:07 pm | |
| 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 | |
|
| |
Contenu sponsorisé
| Sujet: Re: Ouvrir une porte dans une instance differente de 0 | |
| |
|
| |
| Ouvrir une porte dans une instance differente de 0 | |
|