This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..
Question
Boorinio
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
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now