| | [RESOLU]Fix Spawn multiple des Crown of lord et Circlet | |
| | Auteur | Message |
---|
Tauphraen
Nombre de messages : 191 Date d'inscription : 27/11/2007
| Sujet: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 12/03/09, 05:43 pm | |
| Bonsoir à tous, Je fais ce post pour partager un fix que j'ai fait pour les crown of lord et les circlet de castle. Petit résumé : lorsqu'un joueur (leader ou membre) déposait son circlet et/ou crown of lord dans son warehouse, à chaque restart, le server lui spawnait un nouveau circlet. Dans l2jfree-core\src\main\java\com\l2jfree\gameserver\instancemanager\CrownManager Chercher :[/u] - Code:
-
if (crownId > 0) { if (isLeader && (activeChar.getInventory().getItemByItemId(6841) == null) { activeChar.addItem("Crown", 6841, 1, activeChar, true, true); activeChar.getInventory().updateDatabase(); }
if (activeChar.getInventory().getItemByItemId(crownId) == null) { activeChar.addItem("Crown", crownId, 1, activeChar, true, true); activeChar.getInventory().updateDatabase(); } } Remplacer par : - Code:
-
if (crownId > 0) { if (isLeader && (activeChar.getInventory().getItemByItemId(6841) == null && activeChar.getWarehouse().getItemByItemId(6841) == null)) { activeChar.addItem("Crown", 6841, 1, activeChar, true, true); activeChar.getInventory().updateDatabase(); }
if (activeChar.getInventory().getItemByItemId(crownId) == null && activeChar.getWarehouse().getItemByItemId(crownId) == null) { activeChar.addItem("Crown", crownId, 1, activeChar, true, true); activeChar.getInventory().updateDatabase(); } }
J'ai testé et ça marche sans présenter d'erreur dans les logs. Par contre, je ne suis pas un expert en java donc il est possible que mon code est à "chier" ! Je laisse les pro du forum me le dire ! Cependant, je n'ai pas encore réussi à supprimer le circlet et le crown du warehouse quand le château est perdu. voila le code que j'ai édité mais je ne comprend pas ce qui cloche, si quelqu'un peu m'aider. Dans l2jfree-core\src\main\java\com\l2jfree\gameserver\instancemanager\CastleManager Code original : - Code:
-
// Online Player circlet removal if (player != null && player.getInventory() != null) { L2ItemInstance circlet = player.getInventory().getItemByItemId(circletId); if (circlet != null) { if (circlet.isEquipped()) player.getInventory().unEquipItemInSlotAndRecord(circlet.getLocationSlot()); player.destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); } return; }
Code modifié : - Code:
-
// Online Player circlet removal if (player != null && (player.getInventory() != null || player.getWarehouse() != null)) { L2ItemInstance circletInventory = player.getInventory().getItemByItemId(circletId); if (circletInventory != null) { if (circletInventory.isEquipped()) player.getInventory().unEquipItemInSlotAndRecord(circletInventory.getLocationSlot()); player.destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); } L2ItemInstance circletWarehouse = player.getWarehouse().getItemByItemId(circletId); if (circletWarehouse != null) { player.destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); } return; }
Dernière édition par Tauphraen le 19/03/09, 06:29 pm, édité 1 fois | |
| | | phpsteuf
Nombre de messages : 570 Date d'inscription : 17/03/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 13/03/09, 05:13 pm | |
| Logique que ton code ne fonctionne pas : - Citation :
- L2ItemInstance circletWarehouse = player.getWarehouse().getItemByItemId(circletId);
if (circletWarehouse != null) { player.destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); } Tu regardes s'il existe dans la WH pour ensuite... tenter de le supprimer de l'inventaire . | |
| | | Skatershi
Nombre de messages : 1305 Age : 35 Date d'inscription : 09/11/2006
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 13/03/09, 06:47 pm | |
| | |
| | | Tauphraen
Nombre de messages : 191 Date d'inscription : 27/11/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 13/03/09, 08:15 pm | |
| Ok merci d'avoir relever mon erreur! Cependant, je pensais que c'était la même méthode pour supprimer un item d'un iventaire et/ou warehouse. Maintenant que je sais que l'erreur vient de là, je vais regarder plus en profondeur la méthode pour supprimer dans le warehouse. Toutefois, il est possible que j'ai mal compris ce que tu as voulu dire phpsteuf ! | |
| | | phpsteuf
Nombre de messages : 570 Date d'inscription : 17/03/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 13/03/09, 08:22 pm | |
| - Tauphraen a écrit:
- Ok merci d'avoir relever mon erreur! Cependant, je pensais que c'était la même méthode pour supprimer un item d'un iventaire et/ou warehouse.
La méthode porte peut être le même nom (Ce qui est sans doute le cas, je me souviens plus), mais l'objet lui n'est pas le même. Pour être plus explicite imaginons, j'ai deux objets, un vélo, et un voiture. Si je fais voiture->avance() ce n'est pas le vélo qui va avancer mais la voiture - Tauphraen a écrit:
Maintenant que je sais que l'erreur vient de là, je vais regarder plus en profondeur la méthode pour supprimer dans le warehouse. Toutefois, il est possible que j'ai mal compris ce que tu as voulu dire phpsteuf ! Non je pense que tu as compris Donc grosso modo au lieu d'avoir : - Code:
-
player.destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); Tu va avoir quelque chose du genre : - Code:
-
player.getWarehouse().destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); Si tu as compris ça, tu as tout compris du modèle "objet" D'ailleurs j'ai jamais compris pourquoi beaucoup ne comprenait pas le modèle Objet, c'est sans doute la méthode la plus "naturelle" de programmer. | |
| | | Tauphraen
Nombre de messages : 191 Date d'inscription : 27/11/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 13/03/09, 10:51 pm | |
| Ouais, j'ai fait mes recherches et effectivement le code pour le warehouse est celui que tu as cité plus haut. - Code:
-
player.getWarehouse().destroyItemByItemId("", itemId, 1, player, true); Mais y'a un truc qui m'interpelle, j'ai trouvé aussi cette méthode pour l'inventaire : - Code:
-
player.getInventory().destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); Donc pourquoi dans le code que j'ai cité on indique la localisation de l'item et que dans le code de l2jfree ils ne le font pas pour supprimer le circlet de l'inventaire! - Code:
-
player.destroyItemByItemId("CastleCircletRemoval", circletId, 1, player, true); Pour ce qui est de la compréhension du code objet, je pense que le concept est facilement compréhensible mais dans mon cas, je débute en prog et j'apprends au fur et à mesure à coder en java. C'est pour cela que je ponds des codes pas souvent clean ! Sinon, j'ai entendu parler de la javadoc et apparemment c super utile pour la prog objet mais je ne sais pas comment utiliser celle de l2jfree! Faut il eclipse ? car j'utilise notepad++ pour coder. Désolé, si c'est une question stupide ! | |
| | | Tauphraen
Nombre de messages : 191 Date d'inscription : 27/11/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 14/03/09, 02:28 pm | |
| Pfff, je comprend plus j'ai bien regardé la méthode pour supprimer dans le warehouse et je crois fortement que c'est la bonne mais qd j'essaye de compiler, il me met cette erreur et je ne comprend pas ! erreur : - Code:
-
D:\Workspace\Gameserver_dev\trunk\l2jfree-core\src\main\java\com\l2jfree\gameserver\instancemanager\CastleManager.java:[241,26] destroyItemByItemId(java.lang.String,int,int,com.l2jfree.gameserver.model.actor.instance.L2PcInstance, com.l2jfree.gameserver.model.L2Object) in com.l2jfree.gameserver.model.itemcontainer.ItemContainer cannot be applied to (java.lang.String,int,int,com.l2jfree.gameserver.model.actor.instance.L2PcInstance,boolean) Je cherche à comprendre l'erreur! Apparemment ça viendrait du boolean qui ne serait pas interprété par la méthode destroyItemByItemId dans ItemContainer mais j'en suis pas sur ! Arg, j'en ai marre ... lol | |
| | | Respawner
Nombre de messages : 1620 Age : 35 Date d'inscription : 20/04/2006
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 14/03/09, 02:55 pm | |
| C'est pas que le booléen n'est pas interprété c'est que tu ne peux pas utiliser un booléen en dernier argument. Il faut que ça soit un L2Object. Faut en apprendre plus sur Java et le polymorphisme et tu comprendras mieux | |
| | | Tauphraen
Nombre de messages : 191 Date d'inscription : 27/11/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 14/03/09, 03:31 pm | |
| En effet, la méthode n'interprète pas les boolean donc j'ai remplacé true par null mais je ne sais pas si c'est judicieux! Néanmoins, la compilation se fait et le circlet est bien supprimé de l'inventaire lorsqu'on perd le château. De plus, aucune erreur relevé dans les logs. [quote=Respawner]Faut en apprendre plus sur Java et le polymorphisme et tu comprendras mieux Smile[/quote] J'apprends petit à petit, je me suis un acheté un bouquin sur le java! Mais, comme tout débutant, j'ai du mal et je pose beaucoup de questions | |
| | | Respawner
Nombre de messages : 1620 Age : 35 Date d'inscription : 20/04/2006
| | | | Skatershi
Nombre de messages : 1305 Age : 35 Date d'inscription : 09/11/2006
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 14/03/09, 08:19 pm | |
| Les bouquins saylemal (Enfin ceux de tuto seulement). A la limite la Javadoc , ça peut servir. Mon petit coup de gueule de la journée | |
| | | Respawner
Nombre de messages : 1620 Age : 35 Date d'inscription : 20/04/2006
| | | | phpsteuf
Nombre de messages : 570 Date d'inscription : 17/03/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 15/03/09, 03:32 pm | |
| - Skatershi a écrit:
- Les bouquins saylemal (Enfin ceux de tuto seulement).
Pourtant pour apprendre l'algo (Et non un langage particulier) c'est essentiel De la même façon il existe de très bons livres sur le Java Faire des tutos sans rien y comprendre, ça sert pas à grand chose | |
| | | Tauphraen
Nombre de messages : 191 Date d'inscription : 27/11/2007
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 15/03/09, 07:59 pm | |
| Le livre que je possède est celui de C. Delannoy, Best Of Java 5ième édition. | |
| | | Skatershi
Nombre de messages : 1305 Age : 35 Date d'inscription : 09/11/2006
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet 15/03/09, 11:08 pm | |
| - phpsteuf a écrit:
Pourtant pour apprendre l'algo (Et non un langage particulier) c'est essentiel De la même façon il existe de très bons livres sur le Java Jamais ouvert un bouquin de quoi que ce soit qui s'approche de l'informatique, alors la prog... Je préfère me casser le derrière des heures que réservés ces même heures à la lecture fastidieuse de livres sur "comment bien approcher ça, ça ou ça". Le chasseur se perfectionne par ces instincts, le forgeron forge pour le devenir etc. Je ne veux pas faire de débat la dessus hein, mais perso, c'est pas fait pour moi. - phpsteuf a écrit:
Faire des tutos sans rien y comprendre, ça sert pas à grand chose + 1. Pour reprendre mes métaphores foireuses, c'est comme de lire un guide de pêche, tu le lis sans connaitre les termes exactes, et donc ça ne sers à rien mais ça fait plus intelligent dans une discussion de ne pas savoir de quoi on cause. (Logique nan ? :p) | |
| | | Contenu sponsorisé
| Sujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet | |
| |
| | | | [RESOLU]Fix Spawn multiple des Crown of lord et Circlet | |
|
Sujets similaires | |
|
| Permission de ce forum: | Vous ne pouvez pas répondre aux sujets dans ce forum
| |
| |
| |