Jump to content

Question

Posted

Hello,

 

How can i add here:

    public boolean isAllowedToEnchantSkills()
    {
        if (isLocked())
            return false;
        if (isTransformed())
            return false;
        if (AttackStanceTaskManager.getInstance().getAttackStanceTask(this))
            return false;
        if (isCastingNow() || isCastingSimultaneouslyNow() || isInCombat())
            return false;
        if (isInBoat() || isInAirShip())
            return false;
        return true;
    }

If the skill has cooldown to return false?
 

    // Check if this skill is enabled (ex : reuse time)
        if (isSkillDisabled(skill))
        {
            SystemMessage sm = null;
            
            if (_reuseTimeStamps.containsKey(Integer.valueOf(skill.getReuseHashCode())))
            {
                int remainingTime = (int)(_reuseTimeStamps.get(Integer.valueOf(skill.getReuseHashCode())).getRemaining()/1000);
                int hours = remainingTime / 3600;
                int minutes = (remainingTime % 3600) / 60;
                int seconds = (remainingTime % 60);
                if (hours > 0)
                {
                    sm = new SystemMessage(SystemMessageId.S2_HOURS_S3_MINUTES_S4_SECONDS_REMAINING_FOR_REUSE_S1);
                    sm.addSkillName(skill);
                    sm.addNumber(hours);
                    sm.addNumber(minutes);
                }
                else if (minutes > 0)
                {
                    sm = new SystemMessage(SystemMessageId.S2_MINUTES_S3_SECONDS_REMAINING_FOR_REUSE_S1);
                    sm.addSkillName(skill);
                    sm.addNumber(minutes);
                }
                else
                {
                    sm = new SystemMessage(SystemMessageId.S2_SECONDS_REMAINING_FOR_REUSE_S1);
                    sm.addSkillName(skill);
                }
                
                sm.addNumber(seconds);
            }
            else
            {
                sm = new SystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE);
                sm.addSkillName(skill);
            }
            
            sendPacket(sm);
            return false;
        }

 

Recommended Posts

  • 0
Posted

I don't think it really matters , l2j epilogue its the same

On client packets there is a packet like EnchantSkill.java. Can u upload it to Pastebin? I will look at it and try to see how u can do it. Also the codes you posted, are they from L2PcInstance?

  • 0
Posted (edited)

After this try to do the following (i dont remember how they should be exactly but you will get the point)

                  if (Config.ES_SP_BOOK_NEEDED && usesBook)
                    {
                        // Haven't spellbook
                        if (spb == null)
                        {
                            player.sendPacket(SystemMessageId.YOU_DONT_HAVE_ALL_OF_THE_ITEMS_NEEDED_TO_ENCHANT_THAT_SKILL);
                            return;
                        }
                    }

                    if (!player.canUseSkill(skill.getId(),skill.getLevel()-1)

                  {

                       player.sendMessage("skill is on CD");

                        return;

                     }

 

As i can remember the skill.getLevel will return the next skill level, so the current level on player's skill is -1...

Edited by Solomun
  • 0
Posted

I dont have canuseskill on l2pcinstance i just want to block enchanting skill when it is on cooldown

                    if (player.isSkillDisabled(skill))

                            {

                                 player.sendMessage("skill is on CD");

                                  return;

                               }

tried this but it doesn't work , i think that it can be fixed somehow with the isDisabledsSkill

  • 0
Posted

I dont have canuseskill on l2pcinstance i just want to block enchanting skill when it is on cooldown

                    if (player.isSkillDisabled(skill))

                            {

                                 player.sendMessage("skill is on CD");

                                  return;

                               }

tried this but it doesn't work , i think that it can be fixed somehow with the isDisabledsSkill

I'm from phone right now. I have this code ready. If you cant find the solution till tommorow I will post it here.

  • 0
Posted (edited)

Try this

for (L2Skill skill : player.getSkills().values())
{
   if (player.isSkillDisabled(skill))
   {
      player.sendMessage("Crap, you can not do it right now.");
      return false;
   }
}
Edited by SweeTs
  • 0
Posted

 

Try this

for (L2Skill skill : player.getSkills().values())
{
   if (player.isSkillDisabled(skill))
   {
      player.sendMessage("Crap, you can not do it right now.");
      return false;
   }
}

it is working but how can we do it for Skill id check? because now if one skill is on reuse and trying to enchant on another you get the return false

  • 0
Posted

it is working but how can we do it for Skill id check? because now if one skill is on reuse and trying to enchant on another you get the return false

 

Client packet EnchantSkill has variable L2Skill skill.

 

Try this:

 

if (player.isSkillDisabled(skill)) return;

 

p.s: i didnt remember that there is a method isSkillDisabled :P

  • 0
Posted

 

Try this

for (L2Skill skill : player.getSkills().values())
{
   if (player.isSkillDisabled(skill))
   {
      player.sendMessage("Crap, you can not do it right now.");
      return false;
   }
}

Why to check all skills since he want to check the skill that selected for enchant?

 

as solomoun suggested,

if (player.isSkillDisabled(skill))
      return false;
  • 0
Posted

only sweets work so far, but it doesn't check for the specific skill

As i promised you, i searched for the solution. Here you go, i ve tested this in freya and it worked like a charm....

 

 

Index: java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java

===================================================================

--- java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java (revision 13244)

+++ java/com/l2jserver/gameserver/network/clientpackets/RequestExEnchantSkill.java (working copy)

@@ -26,6 +26,7 @@

import com.l2jserver.gameserver.model.L2ItemInstance;

import com.l2jserver.gameserver.model.L2ShortCut;

import com.l2jserver.gameserver.model.L2Skill;

+import com.l2jserver.gameserver.model.actor.L2Character;

import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;

import com.l2jserver.gameserver.network.SystemMessageId;

import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;

@@ -85,7 +86,11 @@

    player.sendPacket(SystemMessageId.YOU_CANNOT_USE_SKILL_ENCHANT_ON_THIS_LEVEL);

    return;

   }

+  if (!player.isInsideZone(L2Character.ZONE_PEACE) && !player.isGM()) //Another prevent

+  {

+   player.sendMessage("You can enchant your skills only in peace zone.");

+   return;

+  }

   if (!player.isAllowedToEnchantSkills())

   {

    player.sendPacket(SystemMessageId.YOU_CANNOT_USE_SKILL_ENCHANT_ATTACKING_TRANSFORMED_BOAT);

@@ -93,11 +98,16 @@

   }

  

   final L2Skill skill = SkillTable.getInstance().getInfo(_skillId, _skillLvl);

+  final L2Skill prev_skill = SkillTable.getInstance().getInfo(_skillId, _skillLvl - 1);

   if (skill == null)

   {

    return;

   }

+  if (!player.checkCanUse(prev_skill))

+  {

+   player.sendMessage("You cant enchant this skill at this momment.");

+   return;

+  }

   final int costMultiplier = EnchantGroupsTable.NORMAL_ENCHANT_COST_MULTIPLIER;

   final int reqItemId = EnchantGroupsTable.NORMAL_ENCHANT_BOOK;

 

 

I told you that you want the level -1 ;)

 

Add this protection to other skill enchants too (GCM and green giant codex)

  • 0
Posted

seems good  but i dont have the checkCanUse in L2PCinstance, do you have it?

Oops, i totally forgot to check that. It seems checkCanUse is one of my methods.

 

Here it is:

+	public boolean checkCanUse(L2Skill skill)
+	{
+		return checkUseMagicConditions(skill, false, false);
+	}

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...