Jump to content
  • 0

[Help]Anti PvP Npc


Question

Posted

hello guys i added this code in my pack it is an npc, when someone flags another player on it's radius he sleep him and broadcasts a message i have zero errors i made an npc with l2Protector instance but it doesn't work!

 


	package com.l2jrox.gameserver.model.actor.instance;

	import java.util.concurrent.ScheduledFuture;

	import com.l2jrox.Config;
	import com.l2jrox.gameserver.ThreadPoolManager;
	import com.l2jrox.gameserver.datatables.SkillTable;
	import com.l2jrox.gameserver.model.L2Character;
	import com.l2jrox.gameserver.model.L2Object;
	import com.l2jrox.gameserver.model.L2Skill;
import com.l2jrox.gameserver.network.serverpackets.CreatureSay;
	import com.l2jrox.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jrox.gameserver.templates.L2NpcTemplate;


	public class L2ProtectorInstance extends L2NpcInstance
	{
	    private ScheduledFuture<?> _aiTask;

	    private class ProtectorAI implements Runnable
	    {
	        private L2ProtectorInstance _caster;

	        protected ProtectorAI(L2ProtectorInstance caster)
	        {
	            _caster = caster;
        }

	        public void run()
	        {
                /**
             * For each known player in range, cast sleep if pvpFlag != 0 or Karma >0
             * Skill use is just for buff animation
             */
                for (L2PcInstance player : getKnownList().getKnownPlayers().values())

	                {
	                        if ((player.getKarma() > 0 && Config.PROTECTOR_PLAYER_PK) || (player.getPvpFlag() != 0 && Config.PROTECTOR_PLAYER_PVP))
	                        {
	                                handleCast(player, Config.PROTECTOR_SKILLID, Config.PROTECTOR_SKILLLEVEL);
	                        }
                }
        }

        private boolean handleCast(L2PcInstance player, int skillId, int skillLevel)
        {
                if (player.isGM() || player.isDead() || !player.isVisible() || !isInsideRadius(player, getDistanceToWatchObject(player), false, false))
                        return false;

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

            if (player.getFirstEffect(skill) == null)
            {
	                int objId = _caster.getObjectId();
                                skill.getEffects(_caster, player);
	                                broadcastPacket(new MagicSkillUse(_caster, player, skillId, skillLevel, Config.PROTECTOR_SKILLTIME, 0));
	                                broadcastPacket(new CreatureSay(objId,0,String.valueOf(getName()),Config.PROTECTOR_MESSAGE));

	                        return true;
	            }

	            return false;
	        }
	    }


    public L2ProtectorInstance(int objectId, L2NpcTemplate template)
    {
        super(objectId, template);

        if (_aiTask != null)
	                _aiTask.cancel(true);

	        _aiTask = ThreadPoolManager.getInstance().scheduleAiAtFixedRate(new ProtectorAI(this), 3000, 3000);
	    }

	    @Override
	        public void deleteMe()
	    {
	        if (_aiTask != null)
	        {
	                _aiTask.cancel(true);
	                _aiTask = null;
	        }

	        super.deleteMe();
	    }

	    @Override
	        public int getDistanceToWatchObject(L2Object object)
	    {
	        return Config.PROTECTOR_RADIUS_ACTION;
	    }

	    @Override
	        public boolean isAutoAttackable(L2Character attacker)
	    {
	        return false;
	    }
	}

4 answers to this question

Recommended Posts

  • 0
Posted

Okay, if it compiles and does not throw any runtime errors, there should be a problem in the "logic" somewhere. You need to find which part does not act like it is intended do. One of the simplest ways to do that is printing out a message to the logs on almost each step. Something like this:

Found a player near me (nickname)

Checking if he has a pvp flag set.

Pvp flag found for player (nickname), starting handleCast()

Player is not gm, is not dead and is in range

...and so on...

It should be all daisies and rainbows after you find the "broken" part

  • 0
Posted

Okay, if it compiles and does not throw any runtime errors, there should be a problem in the "logic" somewhere. You need to find which part does not act like it is intended do. One of the simplest ways to do that is printing out a message to the logs on almost each step. Something like this:It should be all daisies and rainbows after you find the "broken" part

 

the npc is clearly not working at all not event start checking for inbound players nothing...0 clues here...

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