L2J-FR
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.


Forum pour réunir les administrateurs de serveur L2
 
AccueilAccueil  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment :
Jeux, jouets et Lego : le deuxième à ...
Voir le deal

 

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

Aller en bas 
4 participants
AuteurMessage
Tauphraen

Tauphraen


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty12/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" ! 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 19/03/09, 06:29 pm, édité 1 fois
Revenir en haut Aller en bas
http://sacrifice.montagnedudestin.com
phpsteuf

phpsteuf


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty13/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 clown .
Revenir en haut Aller en bas
http://www.loreal.com
Skatershi

Skatershi


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty13/03/09, 06:47 pm

Pas mal celle là xD
Revenir en haut Aller en bas
Tauphraen

Tauphraen


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty13/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 ! Wink
Revenir en haut Aller en bas
http://sacrifice.montagnedudestin.com
phpsteuf

phpsteuf


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty13/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 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
http://www.loreal.com
Tauphraen

Tauphraen


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty13/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 ! 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
http://sacrifice.montagnedudestin.com
Tauphraen

Tauphraen


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty14/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
Revenir en haut Aller en bas
http://sacrifice.montagnedudestin.com
Respawner

Respawner


Nombre de messages : 1620
Age : 35
Date d'inscription : 20/04/2006

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty14/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 Smile
Revenir en haut Aller en bas
http://www.respawner.fr/
Tauphraen

Tauphraen


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty14/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! Smile
Mais, comme tout débutant, j'ai du mal et je pose beaucoup de questions Wink
Revenir en haut Aller en bas
http://sacrifice.montagnedudestin.com
Respawner

Respawner


Nombre de messages : 1620
Age : 35
Date d'inscription : 20/04/2006

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty14/03/09, 05:20 pm

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.
Revenir en haut Aller en bas
http://www.respawner.fr/
Skatershi

Skatershi


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty14/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 Very Happy
Revenir en haut Aller en bas
Respawner

Respawner


Nombre de messages : 1620
Age : 35
Date d'inscription : 20/04/2006

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty14/03/09, 10:04 pm

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
Revenir en haut Aller en bas
http://www.respawner.fr/
phpsteuf

phpsteuf


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty15/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 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
http://www.loreal.com
Tauphraen

Tauphraen


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty15/03/09, 07:59 pm

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

Skatershi


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

[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty15/03/09, 11:08 pm

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
Contenu sponsorisé





[RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty
MessageSujet: Re: [RESOLU]Fix Spawn multiple des Crown of lord et Circlet   [RESOLU]Fix Spawn multiple des Crown of lord et Circlet Empty

Revenir en haut Aller en bas
 
[RESOLU]Fix Spawn multiple des Crown of lord et Circlet
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» Premier spawn des PJ
» [RESOLU] startAccountManager.bat

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:  
Ne ratez plus aucun deal !
Abonnez-vous pour recevoir par notification une sélection des meilleurs deals chaque jour.
IgnorerAutoriser