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) Gagner un item pour un PvP

Aller en bas 
+2
phpsteuf
Ildaril
6 participants
AuteurMessage
Ildaril

Ildaril


Nombre de messages : 41
Age : 32
Date d'inscription : 07/11/2007

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty29/07/09, 06:17 pm

Voila, j'ai deux questions sur lesquelles je me penche depuis déja un bon moment, sans réussite. Je voudrais simplement faire remporter un item, des qu'on tue un adversaire en pvp.
J'ai essayé, de mettre dans le fichier L2PcInstance.java ceci:

Citation :
public void increasePvpGifts()
{
int giftId = 6393;
L2Item temp = ItemTable.getInstance().getTemplate(giftId);

if (!getInventory().validateCapacity(1))
{
sendPacket(new SystemMessage(SystemMessageId.SLOTS_FULL));
return;
}

if (temp != null && !getInventory().validateWeight((int) temp.getWeight()))
{
sendPacket(new SystemMessage(SystemMessageId.WEIGHT_LIMIT_EXCEEDED));
return;
}

L2ItemInstance gift = ItemTable.getInstance().createItem("PvPGift", giftId, 1, this);
getInventory().addItem("PvPGift", gift, this, null);
sendPacket(new InventoryUpdate());
sendMessage("You have obtained 1 " + gift.getItemName() + ".");
}

Ca n'affiche aucune erreur lors de la compil, mais ca n'a aucun effet en jeu.

Mon deuxieme probleme est a mon avis, simple comme bonjour... mais il réussi quand meme a me faire perdre du temps. Je cherche a donner a mon NPC Buffer, la possibilité de buffer les pet, j'ai donc crée le fichier suivant:

L2PetBufferInstance.java

(pas en entier)
Citation :
public class l2petbufferInstance extends L2FolkInstance
{
public l2petbufferInstance(int objectId, L2NpcTemplate template)
{
super(objectId, template);
}


public void onBypassFeedback(L2PcInstance player, String command)
{
player.sendPacket(new ActionFailed());

StringTokenizer st = new StringTokenizer(command, " ");
String actualCommand = st.nextToken(); // Get actual command

if (actualCommand.equalsIgnoreCase("petbuff"))
{
try
{
int skillId = Integer.parseInt(st.nextToken());
int skillLevel = Integer.parseInt(st.nextToken());
int adena = Integer.parseInt(st.nextToken());

this.setTarget(pet);
L2Skill skill;

try
{
try
{
skill = SkillTable.getInstance().getInfo(skillId, skillLevel);

if (adena >= 1)
player.destroyItemByItemId("l2petbufferInstance", 57, adena, null, true);
player.setTarget(pet);
player.enableAllSkills();
player.doCast(skill);

Cette fois ci, je ne peux pas compiler, ca affiche l'erreur suivante:
Citation :
[javac] Compiling 1216 source files to C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\build\classes
[javac] C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\java\net\sf\l2j\gameserver\model\actor\instance\L2PetBufferInstance.java:34: class l2petbufferInstance is public, should be declared in a file named l2petbufferInstance.java
[javac] public class l2petbufferInstance extends L2FolkInstance
[javac] ^
[javac] C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\java\net\sf\l2j\gameserver\model\actor\instance\L2PetBufferInstance.java:57: cannot find symbol
[javac] symbol : variable pet
[javac] location: class net.sf.l2j.gameserver.model.actor.instance.l2petbufferInstance
[javac] this.setTarget(pet);
[javac] ^
[javac] C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\java\net\sf\l2j\gameserver\model\actor\instance\L2PetBufferInstance.java:68: cannot find symbol
[javac] symbol : variable pet
[javac] location: class net.sf.l2j.gameserver.model.actor.instance.l2petbufferInstance
[javac] player.setTarget(pet);
[javac] ^
[javac] Note: C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\java\net\sf\l2j\gameserver\GeoEngine.java uses or overrides a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] 3 errors

Voila, en espérant pouvoir trouvé de l'aide ici, je vous souhaite la bonne soirée.


Dernière édition par Ildaril le 19/09/09, 12:46 pm, édité 1 fois
Revenir en haut Aller en bas
phpsteuf

phpsteuf


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

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty29/07/09, 06:56 pm

C'est écrit sur le message d'erreur à la compilation, c'est comme le Port-salut !

Simplement :

l2petbufferInstance <> L2PetBufferInstance

Voir : http://fr.wikipedia.org/wiki/Sensibilit%C3%A9_%C3%A0_la_casse
Revenir en haut Aller en bas
http://www.loreal.com
Ildaril

Ildaril


Nombre de messages : 41
Age : 32
Date d'inscription : 07/11/2007

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty29/07/09, 10:52 pm

Je ne savais pas qu'en java, les majuscules étaient contés, en tout cas merci, j'essaye ca tout de suite.
Voila l'erreur maintenant:
Citation :

[javac] Compiling 1216 source files to C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\build\classes
[javac] C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\java\net\sf\l2j\gameserver\model\actor\instance\L2PetBufferInstance.java:57: cannot find symbol
[javac] symbol : variable pet
[javac] location: class net.sf.l2j.gameserver.model.actor.instance.L2PetBufferInstance
[javac] this.setTarget(pet);
[javac] ^
[javac] C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\java\net\sf\l2j\gameserver\model\actor\instance\L2PetBufferInstance.java:68: cannot find symbol
[javac] symbol : variable pet
[javac] location: class net.sf.l2j.gameserver.model.actor.instance.L2PetBufferInstance
[javac] player.setTarget(pet);
[javac] ^
[javac] Note: C:\Documents and Settings\Ak3uSeunam.LSDBOT-III\Mes documents\workspace\L2_GameServer_It\java\net\sf\l2j\gameserver\GeoEngine.java uses or overrides a deprecated API.
[javac] Note: Recompile with -Xlint:deprecation for details.
[javac] 2 errors
J'essaye d'y remédier...


Je voudrais préciser que le gain d'item lors du pvp est une priorité majeur pour mon serveur, et ne pourra pas être lancé sans ce mode.

Cordialement.
Revenir en haut Aller en bas
Ghurdyl

Ghurdyl


Nombre de messages : 26
Age : 37
Localisation : Belgique
Date d'inscription : 17/06/2009

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty01/08/09, 11:20 am

pour tes item rewards, où et comment est-ce que tu appelles ta méthode "public void increasePvpGifts()"

La déclarer c'est bien mais l'appeler (au bon moment) c'est mieux.
Revenir en haut Aller en bas
Sicca




Nombre de messages : 22
Date d'inscription : 25/04/2009

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty03/08/09, 12:30 am

edit
Revenir en haut Aller en bas
Ildaril

Ildaril


Nombre de messages : 41
Age : 32
Date d'inscription : 07/11/2007

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty09/08/09, 01:12 pm

Je n'ai pas bien saisi ta réponse Ghurdyl, je te montre le script qui comprend le fait de recevoir un point pvp lorsqu'on tue un adversaire, et le script que j'ai ajouté pour gagner un item:

Code:
   public void onKillUpdatePvPKarma(L2Character target)
   {
      if (target == null) return;
      if (!(target instanceof L2PlayableInstance)) return;

      L2PcInstance targetPlayer = null;
      if (target instanceof L2PcInstance)
         targetPlayer = (L2PcInstance)target;
      else if (target instanceof L2Summon)
         targetPlayer = ((L2Summon)target).getOwner();

      if (targetPlayer == null) return;                                          // Target player is null
      if (targetPlayer == this) return;                                          // Target player is self

      if (isCursedWeaponEquiped())
      {
         CursedWeaponsManager.getInstance().increaseKills(_cursedWeaponEquipedId);
         return;
      }

      // If in duel and you kill (only can kill l2summon), do nothing
      if (isInDuel() && targetPlayer.isInDuel()) return;

        // If in Arena, do nothing
      if (isInsideZone(ZONE_PVP) || targetPlayer.isInsideZone(ZONE_PVP))
         return;

        // Check if it's pvp
      if (
            (
                  checkIfPvP(target) &&            //  Can pvp and
                  targetPlayer.getPvpFlag() != 0  //  Target player has pvp flag set
            ) ||                                    // or
            (
                  isInsideZone(ZONE_PVP) &&               //  Player is inside pvp zone and
                  targetPlayer.isInsideZone(ZONE_PVP)     //  Target player is inside pvp zone
            )
      )
      {
            increasePvpKills();
      }
      else                                                                        // Target player doesn't have pvp flag set
      {
            // check about wars
            if (targetPlayer.getClan() != null && getClan() != null)
            {
                if (getClan().isAtWarWith(targetPlayer.getClanId()))
                {
                    if (targetPlayer.getClan().isAtWarWith(getClanId()))
                    {
                        // 'Both way war' -> 'PvP Kill'
                        increasePvpKills();
                        return;
                    }
                }
            }

            // 'No war' or 'One way war' -> 'Normal PK'
         if (targetPlayer.getKarma() > 0)                                        // Target player has karma
         {
            if ( Config.KARMA_AWARD_PK_KILL )
            {
                    increasePvpKills();
            }
         }
         else if (targetPlayer.getPvpFlag() == 0)                                                                    // Target player doesn't have karma
         {
                increasePkKillsAndKarma(targetPlayer.getLevel());
         }
      }
   }

    /**
    * Increase the pvp kills count and send the info to the player
    *
    */
    public void increasePvpKills()
    {
        // Add karma to attacker and increase its PK counter
        setPvpKills(getPvpKills() + 1);

        // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
        sendPacket(new UserInfo(this));
    }

public void increasePvpGifts()
{
  int giftId  = -6393;
  L2Item temp  = ItemTable.getInstance().getTemplate(giftId);

  if (!getInventory().validateCapacity(1))
  {
      sendPacket(new SystemMessage(SystemMessageId.SLOTS_FULL));
      return;
  }

  if (temp != null && !getInventory().validateWeight((int) temp.getWeight()))
  {
      sendPacket(new SystemMessage(SystemMessageId.WEIGHT_LIMIT_EXCEEDED));
      return;
  }

  L2ItemInstance gift = ItemTable.getInstance().createItem("PvPGift", giftId, 1, this);
  getInventory().addItem("PvPGift", gift, this, null);
  sendPacket(new InventoryUpdate());
  sendMessage("You have obtained 1 " + gift.getItemName() + ".");
 
        {
            increasePvpGifts();
      }
}
Revenir en haut Aller en bas
Ghurdyl

Ghurdyl


Nombre de messages : 26
Age : 37
Localisation : Belgique
Date d'inscription : 17/06/2009

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty09/08/09, 07:23 pm

Iladril a écrit:
Je n'ai pas bien saisi ta réponse Ghurdyl, je te montre le script qui comprend le fait de recevoir un point pvp lorsqu'on tue un adversaire, et le script que j'ai ajouté pour gagner un item:
Il faut que l'un appelle explicitement l'autre.

si je regarde bien le code que tu postes, tu ajoutes une méthode "updatePvPGift" à la classe L2PCInstance.

Cette méthode devrait ajouter un item à l'inventaire de l'instance courante du joueur.

Mais cette méthode n'est pas appelée automatiquement, je dirais même que de par les codes que tu donnes, elle n'est jamais appelée / exécutée.

De plus, l'appel de ta méthode "increasePvpGifts();"
dans le code même de la méthode va crasher ton serveur car c'est une récursive sans condition de sortie (effet similaire à une boucle infinie)

Pour moi cette instruction d'appel à ta méthode devrait plutôt se trouver dans la méthode "public void increasePvpKills()"

comme ceci par exemple :
L2PcInstance.java : modification te ta méthode :
Code:
public void increasePvpGifts()
{
  int giftId  = -6393;
  L2Item temp  = ItemTable.getInstance().getTemplate(giftId);

  if (!getInventory().validateCapacity(1))
  {
      sendPacket(new SystemMessage(SystemMessageId.SLOTS_FULL));
      return;
  }

  if (temp != null && !getInventory().validateWeight((int) temp.getWeight()))
  {
      sendPacket(new SystemMessage(SystemMessageId.WEIGHT_LIMIT_EXCEEDED));
      return;
  }

  L2ItemInstance gift = ItemTable.getInstance().createItem("PvPGift", giftId, 1, this);
  getInventory().addItem("PvPGift", gift, this, null);
  sendPacket(new InventoryUpdate());
  sendMessage("You have obtained 1 " + gift.getItemName() + ".");
  // <- suppression de 3 lignes
}
Tu remarqueras la suppression des 3 dernières ligne spar rapport à ton code.

L2PcInstance.java : modification de la méthode increasePvpKills()
Code:
    public void increasePvpKills()
    {
        // Add karma to attacker and increase its PK counter
        setPvpKills(getPvpKills() + 1);

        // Send a Server->Client UserInfo packet to attacker with its Karma and PK Counter
        sendPacket(new UserInfo(this));
        sendPacket(new ExBrExtraUserInfo(this));
 
        increasePvpGifts(); // <- appel à ta propre méthode
     
    }
Ti noteras l'ajout de l'appel de ta méthode à la fin

de cette façon, la méthode que tu viens d'écrire sera exécutée une seule fois (au lieu d'une infinité) en même temps que la méthode habituelle increasePvpKills().
N.B. avec ce code, un PK reçoit aussi l'item.
Revenir en haut Aller en bas
Kin0u




Nombre de messages : 19
Date d'inscription : 03/12/2008

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty11/08/09, 05:00 pm

je comprend pas pourqquoi tu dis que meme les pk seront récompensé vu que il y a 2 méthode différente , il y a quelque chose qui m'échappe
Revenir en haut Aller en bas
Ildaril

Ildaril


Nombre de messages : 41
Age : 32
Date d'inscription : 07/11/2007

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty11/08/09, 05:06 pm

Merci à toi Ghurdyl, j'ai essayé ce que tu m'as donné, je n'ai pas pu le compiler avec
Code:
sendPacket(new ExBrExtraUserInfo(this));
il ne connaissait apparemment pas ce language. J'en profite pour dire que je travail sur un serveur L2j Interlude.

J'ai donc enlever le code qui n'était pas connu, et ça a fonctionné, mais rien ne se passe en jeux, que ce soit lors d'un PVP, ou d'un PK.

edit: en fait si il se passe quelque chose dans la console gameserver:
Code:

11 août 2009 17:01:37 net.sf.l2j.gameserver.model.L2Character callSkill
ATTENTION:
java.lang.ArrayIndexOutOfBoundsException: -6393
   at net.sf.l2j.gameserver.datatables.ItemTable.getTemplate(ItemTable.java:652)
   at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.increasePvpGifts(L2PcInstance.java:4461)
   at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.increasePvpKills(L2PcInstance.java:4454)
   at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.onKillUpdatePvPKarma(L2PcInstance.java:4409)
   at net.sf.l2j.gameserver.model.actor.instance.L2PlayableInstance.doDie(L2PlayableInstance.java:99)
   at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.doDie(L2PcInstance.java:4163)
   at net.sf.l2j.gameserver.model.actor.status.CharStatus.reduceHp(CharStatus.java:209)
   at net.sf.l2j.gameserver.model.actor.status.PlayableStatus.reduceHp(PlayableStatus.java:44)
   at net.sf.l2j.gameserver.model.actor.status.PcStatus.reduceHp(PcStatus.java:110)
   at net.sf.l2j.gameserver.model.actor.status.PcStatus.reduceHp(PcStatus.java:48)
   at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.reduceCurrentHp(L2PcInstance.java:9126)
   at net.sf.l2j.gameserver.handler.skillhandlers.Pdam.useSkill(Pdam.java:240)
   at net.sf.l2j.gameserver.model.L2Character.callSkill(L2Character.java:5804)
   at net.sf.l2j.gameserver.model.L2Character.onMagicHitTimer(L2Character.java:5515)
   at net.sf.l2j.gameserver.model.L2Character$MagicUseTask.run(L2Character.java:1831)
   at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
   at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source)
   at java.util.concurrent.FutureTask.run(Unknown Source)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
   at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
   at java.lang.Thread.run(Unknown Source)


Dernière édition par Ildaril le 23/08/09, 05:09 pm, édité 1 fois
Revenir en haut Aller en bas
Skatershi

Skatershi


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

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty11/08/09, 05:31 pm

L'id de l'objet ne peut être négatif; C'est 6393 que tu dois mettre.
Revenir en haut Aller en bas
Ghurdyl

Ghurdyl


Nombre de messages : 26
Age : 37
Localisation : Belgique
Date d'inscription : 17/06/2009

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty15/08/09, 10:16 am

Pour ce qui est du code non reconnu, bêtement le supprimer n'est peut-être pas la meilleure option.

En fait la méthode "increasePvpKills()" existe déjà dans la classe l2PcInstance (fichier L2PcInstance.java) que tu modifies.

Il faut garder 100% du code de cette méthode et y ajouter l'appel vers ta méthode à toi "increasePvpGifts()"
Code:
public void increasePvpKills()
{
    ... le code existant de la méthode ...
    increasePvpGifts();
}

Pour les PK's, il existe en effet 2 méthodes et suivant l'effet souhaité l'appel à la méthode "increasePvpGifts()" doit se trouver au bon endroit.
Dans le code que je propose (version Gracia Final) pour "increasePvpKills()" l'appel de la méthode se fait en dehors du code qui déternime si le kill est un PK ou non. Il n'en tient donc pas compte.
Revenir en haut Aller en bas
Ildaril

Ildaril


Nombre de messages : 41
Age : 32
Date d'inscription : 07/11/2007

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty23/08/09, 05:44 pm

Merci a vous, ca marche enfin!

Reste un petit problème, l'inventaire ne se met pas a jour, pourtant il y a bien écrit " sendPacket(new InventoryUpdate()); ".
J'ai meme essayé de le rajouter apres " increasePvpGifts(); " mais rien n'y fait, on ne voit l'item gagné qu'après avoir redémarré.
Revenir en haut Aller en bas
Sicca




Nombre de messages : 22
Date d'inscription : 25/04/2009

(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty24/08/09, 01:53 am

Ildaril a écrit:
Merci a vous, ca marche enfin!

Reste un petit problème, l'inventaire ne se met pas a jour, pourtant il y a bien écrit " sendPacket(new InventoryUpdate()); ".
J'ai meme essayé de le rajouter apres " increasePvpGifts(); " mais rien n'y fait, on ne voit l'item gagné qu'après avoir redémarré.

il faut enregistrer les informations coté serveur .
Il y a une methode qui fait ça (update de la base) , je ne me souviens plus trop de son nom exact mais c'est facile a trouver.
Revenir en haut Aller en bas
Contenu sponsorisé





(Resolu) Gagner un item pour un PvP Empty
MessageSujet: Re: (Resolu) Gagner un item pour un PvP   (Resolu) Gagner un item pour un PvP Empty

Revenir en haut Aller en bas
 
(Resolu) Gagner un item pour un PvP
Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» [Resolu] Ajouter un item en spoil
» [resolu]requete PHP pour afficher une Progressbar
» [Resolu] Scrypt de news pour site
» [Resolu] Aide pour requete en tableau
» Item avec bonus

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