Secret Experience

Secret Experience (https://secretexperience.net/index.php)
-   [Lineage] Java Mods (https://secretexperience.net/forumdisplay.php?f=636)
-   -   [L2JFree] Core Buffer (https://secretexperience.net/showthread.php?t=10315)

paytaly 02-07-2009 10:20 PM

Core Buffer
 
Esse é um Mod para Criar um NPC Buffer direto no Java.

Vá ate a Pasta: .../gameserver/datatables e crie um Arquivo com o nome NpcBufferSkillIdsTable.java e adicione esse código no Arquivo:
Código:

package net.sf.l2j.gameserver.datatables;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Map;

import javolution.util.FastMap;

import net.sf.l2j.L2DatabaseFactory;

public class NpcBufferSkillIdsTable
{
  private static NpcBufferSkillIdsTable _instance = null;

  private Map<Integer, NpcBufferSkills> _buffers = new FastMap<Integer, NpcBufferSkills>();

  private NpcBufferSkillIdsTable()
  {
      Connection con = null;
      int skillCount = 0;

      try
      {
        con = L2DatabaseFactory.getInstance().getConnection();

        PreparedStatement statement = con.prepareStatement("SELECT npc_id`,`skill_id`,`skill_level`,`skill_fee_id`,`skill_fee_amount` FROM `npc_buffer_skill_ids` ORDER BY `npc_id` ASC");
        ResultSet rset = statement.executeQuery();

        int lastNpcId = 0;
        NpcBufferSkills skills = null;

        while (rset.next())
        {
            int npcId = rset.getInt("npc_id");
            int skillId = rset.getInt("skill_id");
            int skillLevel = rset.getInt("skill_level");
            int skillFeeId = rset.getInt("skill_fee_id");
            int skillFeeAmount = rset.getInt("skill_fee_amount");

            if (npcId != lastNpcId)
            {
              if (lastNpcId != 0)
                  _buffers.put(lastNpcId, skills);

              skills = new NpcBufferSkills(npcId);
              skills.addSkill(skillId, skillLevel, skillFeeId, skillFeeAmount);
            }
            else
              skills.addSkill(skillId, skillLevel, skillFeeId, skillFeeAmount);

            lastNpcId = npcId;
            skillCount++;
        }
       
        _buffers.put(lastNpcId, skills);
        rset.close();
        statement.close();
      }
      catch (Exception e)
      {
        System.out.println("NpcBufferSkillIdsTable: Error reading npc_buffer_skill_ids table: " + e);
      }
      finally
      {
        try{con.close();}catch(Exception e){}
      }

      System.out.println("NpcBufferSkillIdsTable: Loaded " + _buffers.size() + " buffers and " + skillCount + " skills.");
  }

  public static NpcBufferSkillIdsTable getInstance()
  {
      if (_instance == null)
        _instance = new NpcBufferSkillIdsTable();
      return _instance;
  }

  public int[] getSkillInfo(int npcId, int skillId)
  {
      NpcBufferSkills skills = _buffers.get(npcId);
     
      if (skills == null)
        return null;

      return skills.getSkillInfo(skillId);
  }
}

Agora na mesma pasta (.../gameserver/datatables), crie o Arquivo com o nome NpcBufferSkills.java e adicone esse código:
Código:

package net.sf.l2j.gameserver.datatables;

import java.util.Map;

import javolution.util.FastMap;

public class NpcBufferSkills
{
  private int _npcId = 0;
  private Map<Integer, Integer> _skillLevels = new FastMap<Integer, Integer>();
  private Map<Integer, Integer> _skillFeeIds = new FastMap<Integer, Integer>();
  private Map<Integer, Integer> _skillFeeAmounts = new FastMap<Integer, Integer>();

  public NpcBufferSkills(int npcId)
  {
      _npcId = npcId;
  }

  public void addSkill(int skillId, int skillLevel, int skillFeeId, int skillFeeAmount)
  {
      _skillLevels.put(skillId, skillLevel);
      _skillFeeIds.put(skillId, skillFeeId);
      _skillFeeAmounts.put(skillId, skillFeeAmount);
  }

  public int[] getSkillInfo(int skillId)
  {
      Integer skillLevel = _skillLevels.get(skillId);
      Integer skillFeeId = _skillFeeIds.get(skillId);
      Integer skillFeeAmount = _skillFeeAmounts.get(skillId);
     
      if (skillLevel == null || skillFeeId == null || skillFeeAmount == null)
        return null;

      return new int[] {skillLevel, skillFeeId, skillFeeAmount};
  }

  public int getNpcId()
  {
      return _npcId;
  }
}

Agora vá até a Pasta: .../gameserver/model/actor/instance e crie um arquivo com o nome L2NpcBufferInstance.java e adicione esse código:
Código:

package net.sf.l2j.gameserver.model.actor.instance;

import java.util.Vector;
import java.util.concurrent.ScheduledFuture;

import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.cache.HtmCache;
import net.sf.l2j.gameserver.datatables.NpcBufferSkillIdsTable;
import net.sf.l2j.gameserver.datatables.SkillTable;
import net.sf.l2j.gameserver.model.L2Effect;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.L2Skill;
import net.sf.l2j.gameserver.serverpackets.ActionFailed;
import net.sf.l2j.gameserver.serverpackets.MagicSkillUser;
import net.sf.l2j.gameserver.serverpackets.NpcHtmlMessage;
import net.sf.l2j.gameserver.skills.Formulas;
import net.sf.l2j.gameserver.templates.L2NpcTemplate;
import net.sf.l2j.util.Rnd;

/**
 * L2NpcBufferInstance
 *
 * @author FBIagent
 */
public class L2NpcBufferInstance extends L2NpcInstance
{
  private class BuffTask implements Runnable
  {
      private Boolean _buffing = false;
      private L2NpcBufferInstance _me = null;
      private Vector<L2PcInstance> _playerInstances = new Vector<L2PcInstance>();
      private Vector<Integer> _skillIds = new Vector<Integer>();
      private Vector<Integer> _skillLevels = new Vector<Integer>();
      private ScheduledFuture _task = null;

      public BuffTask(L2NpcBufferInstance me)
      {
        _me = me;
        _task = ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(this, 100, 100);
      }
     
      public void addBuff(L2PcInstance playerInstance, int skillId, int skillLevel)
      {
        synchronized (_playerInstances)
        {
/*            int count = 0;
           
            for (L2PcInstance playerInstance2 : _playerInstances)
            {
              if (playerInstance2 == playerInstance)
                  count++;
            }

            if (count > 4)
            {
              playerInstance.sendMessage("The buffer can't imagine more than 5 buffs per player.");
              return;
            }*/
           
            _playerInstances.add(playerInstance);
            _skillIds.add(skillId);
            _skillLevels.add(skillLevel);
        }
      }

      public void run()
      {
        boolean abort = false;

        synchronized (_buffing)
        {
            abort = _buffing;
            _buffing = true;
        }
       
        if (abort)
            return;
       
        try
        {
            Thread.sleep(1);
        }
        catch (InterruptedException ie)
        {}

        int index = -1;
        L2PcInstance playerInstance = null;
        int skillId = 0;
        int skillLevel = 0;

        synchronized (_playerInstances)
        {
            index = _skillIds.size() - 1;

            if (index != -1)
            {
              index = Rnd.get(_skillIds.size());
              playerInstance = _playerInstances.get(index);
              skillId = _skillIds.get(index);
              skillLevel = _skillLevels.get(index);
            }
        }
           
        if (index == -1)
            return;

        L2Skill skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
           
        if (playerInstance != null && skill != null)
        {
            //if (_me.isInsideRadius(playerInstance.getX(), playerInstance.getY(), skill.getCastRange(), true))
            //continue;

            int skillTime = Formulas.getInstance().calcMAtkSpd(_me, skill, skill.getHitTime());
           
            if (skill.isDance())
              _me.broadcastPacket(new MagicSkillUser(_me, _me, skillId, skillLevel, skillTime, 0));
            else
              _me.broadcastPacket(new MagicSkillUser(_me, playerInstance, skillId, skillLevel, skillTime, 0));
             
            long continueTime = System.currentTimeMillis() + skillTime;

            while (continueTime >= System.currentTimeMillis())
            {
              try
              {
                  Thread.sleep(1);
              }
              catch (InterruptedException ie)
              {}
            }
             
            L2Effect[] effects = playerInstance.getAllEffects();

            if (effects != null)
            {
              for (L2Effect e : effects)
              {
                  if (e != null && skill != null)
                  {
                    if (e.getSkill().getId() == skill.getId())
                        e.exit();
                  }
              }
            }

            skill.getEffects(playerInstance, playerInstance);
        }
        else
            System.out.println("NpcBuffer warning(" + getNpcId() + " at " + getX() + ", " + getY() + ", " + getZ() + "): Skill or Player null!");
           
        synchronized (_playerInstances)
        {
            _playerInstances.remove(index);
            _skillIds.remove(index);
            _skillLevels.remove(index);
        }
       
        synchronized (_buffing)
        {
            _buffing = false;
        }
      }

      protected void stopTask()
      {
        if (_task != null)
        {
            _task.cancel(true);
            _task = null;
        }
      }
  }
 
  private BuffTask _buffTaskInstance = null;

  public L2NpcBufferInstance(int objectId, L2NpcTemplate template)
  {
      super(objectId, template);
      _buffTaskInstance = new BuffTask(this);
  }

  @Override
  public void showChatWindow(L2PcInstance playerInstance, int val)
  {
      if (playerInstance == null)
        return;
     
      String htmFile = "data/html/mods/NpcBuffer.htm";
      String htmContent = HtmCache.getInstance().getHtm(htmFile);

      if (htmContent != null)
      {
          NpcHtmlMessage npcHtmlMessage = new NpcHtmlMessage(getObjectId());

        npcHtmlMessage.setHtml(htmContent);
          npcHtmlMessage.replace("%objectId%", String.valueOf(getObjectId()));
          playerInstance.sendPacket(npcHtmlMessage);
      }
     
      playerInstance.sendPacket(new ActionFailed());
  }

  @Override
  public void deleteMe()
  {
      _buffTaskInstance.stopTask();
      _buffTaskInstance = null;
      super.deleteMe();
  }

  @Override
    public void onBypassFeedback(L2PcInstance playerInstance, String command)
    {
      if (playerInstance == null)
          return;

      int npcId = getNpcId();

      if (command.startsWith("npc_buffer_buff"))
        {
          String[] params = command.split(" ");
            int skillId = Integer.parseInt(params[1]);
            int[] skillInfos = NpcBufferSkillIdsTable.getInstance().getSkillInfo(npcId, skillId);
           
            if (skillInfos == null)
            {
                System.out.println("NpcBuffer warning(" + npcId + " at " + getX() + ", " + getY() + ", " + getZ() + "): Player " + playerInstance.getName() + " tried to use skill(" + skillId + ") not assigned to npc buffer!");
                return;
            }

          int skillLevel = skillInfos[0];
          int skillFeeId = skillInfos[1];
          int skillFeeAmount = skillInfos[2];

          if (skillFeeId != 0) // take some item?
          {
              if (skillFeeAmount == 0)
              {
                System.out.println("NpcBuffer warning(" + npcId + " at " + getX() + ", " + getY() + ", " + getZ() + "): Fee amount of skill(" + skillId + ") fee id(" + skillFeeId + ") is 0!");
                return;
              }
             
              L2ItemInstance itemInstance = playerInstance.getInventory().getItemByItemId(skillFeeId);

              if (itemInstance == null || (!itemInstance.isStackable() && playerInstance.getInventory().getInventoryItemCount(skillFeeId, -1) < skillFeeAmount))
              {
                playerInstance.sendMessage("You do not have enought items!");
                return;
              }

              if (itemInstance.isStackable())
              {
                if (!playerInstance.destroyItemByItemId("Npc Buffer", skillFeeId, skillFeeAmount, playerInstance.getTarget(), true))
                {
                    playerInstance.sendMessage("You do not have enought items!");
                    return;
                }
              }
              else
              {
                for (int i=0;i<skillFeeAmount;i++)
                    playerInstance.destroyItemByItemId("Npc Buffer", skillFeeId, 1, playerInstance.getTarget(), true);
              }
          }
        L2Skill skill;
        skill = SkillTable.getInstance().getInfo(skillId, skillLevel);
        skill.getEffects(playerInstance, playerInstance);
        }

      showChatWindow(playerInstance, 0);
    }
}

Agora vá até a Pasta .../gameserver e abra o Arquivo: GameServer.java
Adicione as seguintes linhas em vermelho.
Código:

import net.sf.l2j.gameserver.datatables.NobleSkillTable;
import net.sf.l2j.gameserver.datatables.NpcBufferSkillIdsTable;
 import net.sf.l2j.gameserver.datatables.NpcTable;

Código:

      HeroSkillTable.getInstance();
      NpcBufferSkillIdsTable.getInstance();
 
        //Call to load caches

Crie o SQL para o NPC e o Arquivo NpcBuffer.Htm na Pasta: ...\data\html\mods.
Pronto! Agora você acaba de Criar um Core Buffer.

Créditos: FBIAgent

{João P.} 25-10-2009 09:05 AM

Tu já viw l2jnet regular buffers pelo .PROPRITIES podia postar pra galera muito bom neem prescisa dá ajuda como mudar o tempo dos Buffers

paytaly 25-10-2009 09:28 AM

@{João P.}, quase todos os Packs hoje tem esse Mod.
E L2JNet não existe. Aquilo que vocês chamam de L2JNet é L2Emu, que foi roubado pela
L2JNet.

{João P.} 25-10-2009 10:49 AM

mais se fraga o que néeh regular todos buffers pela Config

paytaly 25-10-2009 11:12 AM

"Frago" cara.
Pode não ser exatamente igual mais tem a mesma função
Código:

#Buff time multiple
#Example dance time default is 2 min if BuffMultiplier=30 then
#buff time=60min
#Multiplier dance & song time
DanceTimeMultiplier = 1

# Multiplier buff time
#Example buff time default is 20 min if BuffMultiplier=3 then
#buff time=60min
#is 20*3
BuffMultiplier = 1

#Multiplier time of spirit (COV, POW, POF ...)
#Example spirit time default is 5 min if BuffMultiplier=12 then
#buff time=60min
SpiritMultiplier = 1


{João P.} 27-10-2009 08:35 PM

mais quando muda buga tudo coloca 1380 (13 horas) ow seja outras skiils ficam bugada =(

paytaly 27-10-2009 08:59 PM

@{João P.}, presta atenção! ¬¬
Nessa config "1380" não são 13 horas! lol

Veja só:
O tempo Padrão (Retail(Oficial)) das Danças é 2 Minutos.
Então se você colocar DanceTimeMultiplier = 2, vai ficar:
2 (Tempo Oficial das Danças) * 2 (DanceTimeMultiplier).
Então 2*2=4, sendo assim o tempo das Danças (Songs também) será 4 Minutos.

Tempo Oficial dos Buffs é 20 Minutos e das Profecias é 5 Minutos.

leonardoalves 02-08-2012 11:59 PM

Uma dúvida é só criar o arquivo .htm , mais oque devo por dentro dele?!. Ou é ele todo em brando? kk. Desculpe a ignorância. Boa Noite!


Horários baseados na GMT -3. Agora são 11:50 PM.

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.