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

Partagez | 
 

 [RESOLU]Fix Spawn multiple des Crown of lord et Circlet

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



Nombre de messages : 191
Date d'inscription : 27/11/2007

MessageSujet: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Jeu 12 Mar 2009, 19:43

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" ! Very Happy
Je laisse les pro du forum me le dire ! Wink

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 Jeu 19 Mar 2009, 20:29, édité 1 fois
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sacrifice.montagnedudestin.com
phpsteuf



Nombre de messages : 570
Date d'inscription : 17/03/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Ven 13 Mar 2009, 19:13

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 clown .
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.loreal.com
Skatershi



Nombre de messages : 1305
Age : 28
Date d'inscription : 09/11/2006

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Ven 13 Mar 2009, 20:47

Pas mal celle là xD
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Tauphraen



Nombre de messages : 191
Date d'inscription : 27/11/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Ven 13 Mar 2009, 22:15

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 ! Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sacrifice.montagnedudestin.com
phpsteuf



Nombre de messages : 570
Date d'inscription : 17/03/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Ven 13 Mar 2009, 22:22

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 Wink

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 ! Wink

Non je pense que tu as compris Smile 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" Wink

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.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.loreal.com
Tauphraen



Nombre de messages : 191
Date d'inscription : 27/11/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Sam 14 Mar 2009, 00:51

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 ! Smile

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 ! Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sacrifice.montagnedudestin.com
Tauphraen



Nombre de messages : 191
Date d'inscription : 27/11/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Sam 14 Mar 2009, 16:28

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
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sacrifice.montagnedudestin.com
Respawner



Nombre de messages : 1622
Age : 28
Date d'inscription : 20/04/2006

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Sam 14 Mar 2009, 16:55

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 Smile

_________________
~$ cat new_server > /dev/null

Tout n'est qu'une question de point de vue.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.respawner.fr/
Tauphraen



Nombre de messages : 191
Date d'inscription : 27/11/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Sam 14 Mar 2009, 17:31

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! Smile
Mais, comme tout débutant, j'ai du mal et je pose beaucoup de questions Wink
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sacrifice.montagnedudestin.com
Respawner



Nombre de messages : 1622
Age : 28
Date d'inscription : 20/04/2006

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Sam 14 Mar 2009, 19:20

Tauphraen a écrit:
J'apprends petit à petit, je me suis un acheté un bouquin sur le java! Smile
Mais, comme tout débutant, j'ai du mal et je pose beaucoup de questions Wink
Et c'est bien ! Il faut pas rester bloquer sur quelques choses si ça te pose problème.

_________________
~$ cat new_server > /dev/null

Tout n'est qu'une question de point de vue.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.respawner.fr/
Skatershi



Nombre de messages : 1305
Age : 28
Date d'inscription : 09/11/2006

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Sam 14 Mar 2009, 22:19

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 Very Happy
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Respawner



Nombre de messages : 1622
Age : 28
Date d'inscription : 20/04/2006

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Dim 15 Mar 2009, 00:04

Skatershi a écrit:
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 Very Happy
Tu pues, dis avec délicatesse Smile

_________________
~$ cat new_server > /dev/null

Tout n'est qu'une question de point de vue.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.respawner.fr/
phpsteuf



Nombre de messages : 570
Date d'inscription : 17/03/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Dim 15 Mar 2009, 17:32

Skatershi a écrit:
Les bouquins saylemal (Enfin ceux de tuto seulement).

Pourtant pour apprendre l'algo (Et non un langage particulier) c'est essentiel Wink

De la même façon il existe de très bons livres sur le Java Wink Faire des tutos sans rien y comprendre, ça sert pas à grand chose Smile
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://www.loreal.com
Tauphraen



Nombre de messages : 191
Date d'inscription : 27/11/2007

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Dim 15 Mar 2009, 21:59

Le livre que je possède est celui de C. Delannoy, Best Of Java 5ième édition.
Revenir en haut Aller en bas
Voir le profil de l'utilisateur http://sacrifice.montagnedudestin.com
Skatershi



Nombre de messages : 1305
Age : 28
Date d'inscription : 09/11/2006

MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Lun 16 Mar 2009, 01:08

phpsteuf a écrit:

Pourtant pour apprendre l'algo (Et non un langage particulier) c'est essentiel Wink
De la même façon il existe de très bons livres sur le Java Wink

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 Smile
+ 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)
Revenir en haut Aller en bas
Voir le profil de l'utilisateur
Contenu sponsorisé




MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   Aujourd'hui à 01:24

Revenir en haut Aller en bas
 
[RESOLU]Fix Spawn multiple des Crown of lord et Circlet
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Roll-over (Resolu)
» icone(RESOLU par Migau)
» Constitution d'une unité multiple dans TC Gold
» Compte à rebours multiple
» Comment enlever le bouton : Citation multiple ?

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: