Noticias:

Debes de estar registrado para poder ver el contenido indicado. Registrate o Conectate

Menú Principal

IA PK/Flag Guard

Iniciado por Swarlog, Ago 11, 2022, 01:06 AM

Tema anterior - Siguiente tema

Swarlog

Sirve para las zonas seguras, donde uno si se hace pk por lo general el anti pk lo mata, esto es lo mismo nada mas que tambien te mata si flageas!

Agregar este bajo la instancia de L2ProtectorInstance, a continuación, hacer un NPC en su base de datos y cambiar el tipo de L2Protector.

/* 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 2, 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package com.l2jfrozen.gameserver.model.actor.instance;


import java.util.concurrent.ScheduledFuture;

import javolution.text.TextBuilder;

import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.datatables.SkillTable;
import com.l2jfrozen.gameserver.model.L2Character;
import com.l2jfrozen.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jfrozen.gameserver.templates.L2NpcTemplate;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;

/**
 * @author fofas123
 */
public class L2ProtectorInstance extends L2NpcInstance
{
   private ScheduledFuture<?> _aiTask;
   
   private class ProtectorAI implements Runnable
   {
      private L2ProtectorInstance _caster;

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

      @Override
      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 || player.getPvpFlag() != 0) && Config.PROTECTOR_PLAYER_PK)
            {
               kill(player,_caster);
            }
         }
      }

      private boolean kill(L2PcInstance player, L2Character target)
      {
         if(player.isGM() || player.isDead() || !player.isVisible() || !isInsideRadius(player, Config.PROTECTOR_RADIUS_ACTION, false, false))
            return false;
         
         player.getStatus().setCurrentHp(0);
         player.doDie(player);
         player.setKarma(0);
         player.removeSkill(SkillTable.getInstance().getInfo(3603, 1));
         return true;
      }
   }
   
   private String sendCompleteWindow(L2PcInstance player)
   {
      TextBuilder tb = new TextBuilder();
      NpcHtmlMessage html = new NpcHtmlMessage(0);
     
      tb.append("<html><head>");
      tb.append("<title>Farm Protector</title></head>");
      tb.append("<body>");
      tb.append("<center><font color=\"FF0000\">DONT KILL NEWBIES AND FARMERS!</font></center>");
      tb.append("</body>");
      tb.append("</html");
      html.setHtml(tb.toString());
      player.sendPacket(html);
      return tb.toString();
   }
   
   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 showChatWindow(L2PcInstance player, int val)
    {
        NpcHtmlMessage msg = new NpcHtmlMessage(this.getObjectId());
        msg.setHtml(sendCompleteWindow(player));
        msg.replace("%objectId%", String.valueOf(this.getObjectId()));
        player.sendPacket(msg);
    }
   
   @Override
   public void deleteMe()
   {
      if(_aiTask != null)
      {
         _aiTask.cancel(true);
         _aiTask = null;
      }
     
      super.deleteMe();
   }

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