Jump to content
  • 0

Stuck After Attacking The Npc


Question

Posted

Hello,

 

I have problem, when attacking NPC (not mob) with skill for example gatekeeper in random zone, character gets stuck. You cant move, use skills, use /unstuck command or escape scrolls you have to reconnect. Pack is L2jAcis.

 

Please, help me to sort out this problem, thank you ;)

Recommended Posts

  • 0
Posted

1. Make npcs not attackable  :happyforever:

2. Was it inside L2Attackable or L2Npc? Who knows..  :forever alone like a boss:

3. CTRL + H  :okey:

  • 0
Posted

NPCs are non attackable, but when you try to attack, then you get stuck.

Then take a look in your console maybe some errors are appearing.

Or take a look inside your L2Character maybe it's there, dunno how aCis work but I guess...

  • 0
Posted

Yep, there is an error:

Client: [Character: Test - Account: zuper - IP: 178.16.42.147] - Failed reading: [C] RequestMagicSkillUse ; null
null

 

  • 0
Posted

I'm blind shooting but i guess it's inside L2Character, somewhere when it's trying to get the info of the Target... you must add a condition to handle that exception... like adding && !target.instanceof L2Npc or whatever...

  • 0
Posted

add nullchecks, focus on the costum codes you've added on RequestMagicSkillUse.java @ gameserver/network/clientpackets

  • 0
Posted

I'm blind shooting but i guess it's inside L2Character, somewhere when it's trying to get the info of the Target... you must add a condition to handle that exception... like adding && !target.instanceof L2Npc or whatever...

 

L2Npc is abstract class and I don't think that the developers left such hole on L2Character, it just comes from some badcoded costum code

  • 0
Posted (edited)

add nullchecks, focus on the costum codes you've added on RequestMagicSkillUse.java @ gameserver/network/clientpackets

who adds custom codes there  :y u no?:  xd

 

L2Npc is abstract class and I don't think that the developers left such hole on L2Character, it just comes from some badcoded costum code

Just guessing it can be inside L2Character coz always custom shiats modify things there, dunno if in aCis not but whatever, so long since i dont open eclipse Edited by ^Wyatt
  • 0
Posted
/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.gameserver.network.clientpackets;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.templates.skills.L2SkillType;

public final class RequestMagicSkillUse extends L2GameClientPacket
{
    private int _magicId;
    private boolean _ctrlPressed;
    private boolean _shiftPressed;
    
    @Override
    protected void readImpl()
    {
        _magicId = readD(); // Identifier of the used skill
        _ctrlPressed = readD() != 0; // True if it's a ForceAttack : Ctrl pressed
        _shiftPressed = readC() != 0; // True if Shift pressed
    }
    
    @Override
    protected void runImpl()
    {
        // Get the current L2PcInstance of the player
        final L2PcInstance activeChar = getClient().getActiveChar();
        if (activeChar == null)
            return;
        
        if (activeChar.isOutOfControl())
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the level of the used skill
        final int level = activeChar.getSkillLevel(_magicId);
        if (level <= 0)
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the L2Skill template corresponding to the skillID received from the client
        final L2Skill skill = SkillTable.getInstance().getInfo(_magicId, level);
        if (skill != null)
        {
            // If Alternate rule Karma punishment is set to true, forbid skill Return to player with Karma
            if (skill.getSkillType() == L2SkillType.RECALL && !Config.KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
                return;
            
            // players mounted on pets cannot use any toggle skills
            if (skill.isToggle() && activeChar.isMounted())
                return;
            
            activeChar.useMagic(skill, _ctrlPressed, _shiftPressed);
        }
        else
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            _log.warning("No skill found with id " + _magicId + " and level " + level + ".");
        }
    }
}

Here is that code.

  • 0
Posted
/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package net.sf.l2j.gameserver.network.clientpackets;

import net.sf.l2j.Config;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.templates.skills.L2SkillType;

public final class RequestMagicSkillUse extends L2GameClientPacket
{
    private int _magicId;
    private boolean _ctrlPressed;
    private boolean _shiftPressed;
    
    @Override
    protected void readImpl()
    {
        _magicId = readD(); // Identifier of the used skill
        _ctrlPressed = readD() != 0; // True if it's a ForceAttack : Ctrl pressed
        _shiftPressed = readC() != 0; // True if Shift pressed
    }
    
    @Override
    protected void runImpl()
    {
        // Get the current L2PcInstance of the player
        final L2PcInstance activeChar = getClient().getActiveChar();
        if (activeChar == null)
            return;
        
        if (activeChar.isOutOfControl())
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the level of the used skill
        final int level = activeChar.getSkillLevel(_magicId);
        if (level <= 0)
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            return;
        }
        
        // Get the L2Skill template corresponding to the skillID received from the client
        final L2Skill skill = SkillTable.getInstance().getInfo(_magicId, level);
        if (skill != null)
        {
            // If Alternate rule Karma punishment is set to true, forbid skill Return to player with Karma
            if (skill.getSkillType() == L2SkillType.RECALL && !Config.KARMA_PLAYER_CAN_TELEPORT && activeChar.getKarma() > 0)
                return;
            
            // players mounted on pets cannot use any toggle skills
            if (skill.isToggle() && activeChar.isMounted())
                return;
            
            activeChar.useMagic(skill, _ctrlPressed, _shiftPressed);
        }
        else
        {
            activeChar.sendPacket(ActionFailed.STATIC_PACKET);
            _log.warning("No skill found with id " + _magicId + " and level " + level + ".");
        }
    }
}

Here is that code.

 

 

this is okay, then the problem is at useMagic or some method from L2PcInstance trying to get something from null reference, such npes are hard to find so you have to recall what things you edited recentrly

 

 

who adds custom codes there  :y u no?:  xd

 

Just guessing it can be inside L2Character coz always custom shiats modify things there, dunno if in aCis not but whatever, so long since i dont open eclipse

 

 

I do, and alot

  • 0
Posted

I still place my bet to L2Character  :happyforever:

 

L2PcInstance's useMagic calls L2Character's beginCast so i stick to what I said before, its all related with some custom shit he added

  • 0
Posted (edited)

Simple suggestion, make NPC's to can't be attackable with skills also and problem will not exist anymore.

Edited by Stewie

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...