Secret Experience

Secret Experience (https://secretexperience.net/index.php)
-   [Lineage] Java Mods (https://secretexperience.net/forumdisplay.php?f=636)
-   -   [Outros] Rebirth Manager (https://secretexperience.net/showthread.php?t=34219)

Setokaiba 29-09-2013 11:44 AM

Rebirth Manager
 
Descrição: Esse mod possui a mesma função do sistema de Rebirth para L2oFF:
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]

[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar] [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar] [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]

Core Patch:
Código:

       

    ### Eclipse Workspace Patch 1.0
    #P aCis_gameserver
    Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestAcquireSkillInfo.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/network/clientpackets/RequestAcquireSkillInfo.java      (revision 4)
    +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestAcquireSkillInfo.java      (working copy)
    @@ -17,8 +17,8 @@
    import net.sf.l2j.Config;
    import net.sf.l2j.gameserver.datatables.SkillTable;
    import net.sf.l2j.gameserver.datatables.SkillTreeTable;
    -import net.sf.l2j.gameserver.datatables.SpellbookTable;
    import net.sf.l2j.gameserver.model.L2PledgeSkillLearn;
    +import net.sf.l2j.gameserver.model.L2RebirthSkillLearn;
    import net.sf.l2j.gameserver.model.L2Skill;
    import net.sf.l2j.gameserver.model.L2SkillLearn;
    import net.sf.l2j.gameserver.model.actor.L2Npc;
    @@ -62,7 +62,7 @@
                 
                    switch (_skillType)
                    {
    -                      // General skills
    +                      // Trance's Rebirth skills.
                            case 0:
                                    int skillLvl = activeChar.getSkillLevel(_skillId);
                                    if (skillLvl >= _skillLevel)
    @@ -74,14 +74,13 @@
                                    if (!trainer.getTemplate().canTeach(activeChar.getSkillLearningClassId()))
                                            return;
                                         
    -                              for (L2SkillLearn sl : SkillTreeTable.getInstance().getAvailableSkills(activeChar, activeChar.getSkillLearningClassId()))
    +                              for (L2RebirthSkillLearn rsl : SkillTreeTable.getInstance().getAvailableRebirthSkills(activeChar, activeChar.getSkillLearningClassId()))
                                    {
    -                                      if (sl.getId() == _skillId && sl.getLevel() == _skillLevel)
    +                                      if (rsl.getId() == _skillId && rsl.getLevel() == _skillLevel)
                                            {
    -                                              AcquireSkillInfo asi = new AcquireSkillInfo(_skillId, _skillLevel, sl.getSpCost(), 0);
    -                                              int spellbookItemId = SpellbookTable.getInstance().getBookForSkill(_skillId, _skillLevel);
    -                                              if (spellbookItemId != 0)
    -                                                      asi.addRequirement(99, spellbookItemId, 1, 50);
    +                                              AcquireSkillInfo asi = new AcquireSkillInfo(_skillId, _skillLevel, rsl.getCostSp(), 0);
    +                                              if (Config.LIFE_CRYSTAL_NEEDED && rsl.getItemId() != 0)
    +                                                      asi.addRequirement(1, rsl.getItemId(), 1, 0);
                                                    sendPacket(asi);
                                                    break;
                                            }
    Index: java/net/sf/l2j/gameserver/model/base/ClassId.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/model/base/ClassId.java  (revision 4)
    +++ java/net/sf/l2j/gameserver/model/base/ClassId.java  (working copy)
    @@ -248,4 +248,15 @@
            {
                    return _parent;
            }
    +
    +      /**
    +        * @return to the first class
    +        */
    +      public final ClassId getFirstClass()
    +      {
    +              if (_parent == null)
    +                      return this;
    +             
    +              return _parent.getFirstClass();
    +      }
    }
    \ No newline at end of file
    Index: java/net/sf/l2j/gameserver/model/actor/instance/L2RebirthInstance.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2RebirthInstance.java      (revision 0)
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2RebirthInstance.java      (working copy)
    @@ -0,0 +1,301 @@
    +/*
    + * 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.model.actor.instance;
    +
    +import java.sql.Connection;
    +import java.sql.PreparedStatement;
    +import java.sql.ResultSet;
    +import java.util.HashMap;
    +
    +import net.sf.l2j.Config;
    +import net.sf.l2j.L2DatabaseFactory;
    +import net.sf.l2j.gameserver.model.base.Experience;
    +import net.sf.l2j.gameserver.model.L2ItemInstance;
    +import net.sf.l2j.gameserver.model.L2Skill;
    +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
    +import net.sf.l2j.gameserver.network.SystemMessageId;
    +import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
    +import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
    +import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
    +import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate;
    +
    +/**
    + * Rebirth Manager
    + * @author Trance
    + * @skype chr.trance
    + */
    +public final class L2RebirthInstance extends L2NpcInstance
    +{
    +      private static HashMap<Integer, Integer> _rebirthInfo = new HashMap<>();
    +     
    +      public L2RebirthInstance(int objectId, L2NpcTemplate template)
    +      {
    +              super(objectId, template);
    +      }
    +     
    +      @Override
    +      public void onBypassFeedback(L2PcInstance player, String command)
    +      {
    +              if (command.startsWith("performRebirth"))
    +              {
    +                      // Maximum rebirth count. Return the player's current Rebirth Level.
    +                      int currBirth = getRebirthLevel(player);
    +                      if (currBirth >= Config.REBIRTH_MAX)
    +                      {
    +                              NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
    +                              html.setFile("data/html/managers/rebirth-max.htm");
    +                             
    +                              player.sendPacket(html);
    +                              return;
    +                      }
    +                     
    +                      // Level requirement for a rebirth.
    +                      if (player.getLevel() < Config.REBIRTH_MIN_LEVEL)
    +                      {
    +                              NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
    +                              html.setFile("data/html/managers/rebirth-level.htm");
    +                             
    +                              player.sendPacket(html);
    +                              return;
    +                      }
    +                     
    +                      int itemId = 0, itemCount = 0, loopBirth = 0;
    +                      for (String readItems : Config.REBIRTH_ITEMS)
    +                      {
    +                              String[] currItem = readItems.split(",");
    +                              if (loopBirth == currBirth)
    +                              {
    +                                      itemId = Integer.parseInt(currItem[0]);
    +                                      itemCount = Integer.parseInt(currItem[1]);
    +                                      break;
    +                              }
    +                              loopBirth++;
    +                      }
    +                     
    +                      // Rewards the player with an item.
    +                      rebirthItemReward(player, itemId, itemCount);
    +                     
    +                      // Check and see if its the player's first rebirth calling.
    +                      boolean firstBirth = currBirth == 0;
    +                     
    +                      // Player meets requirements and starts Rebirth process.
    +                      grantRebirth(player, (currBirth + 1), firstBirth);
    +              }
    +              else
    +                      super.onBypassFeedback(player, command);
    +      }
    +     
    +      @Override
    +      public void showChatWindow(L2PcInstance player)
    +      {
    +              NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
    +              html.setFile("data/html/managers/rebirth.htm");
    +              html.replace("%objectId%", String.valueOf(getObjectId()));
    +              html.replace("%level%", "" + Config.REBIRTH_RETURN_TO_LEVEL + "");
    +             
    +              player.sendPacket(html);
    +    }
    +     
    +      /**
    +        * Physically rewards player and resets status to nothing.
    +        *
    +        * @param player the player
    +        * @param newBirthCount the new birth count
    +        * @param firstBirth the first birth
    +        */
    +      public void grantRebirth(L2PcInstance player, int newBirthCount, boolean firstBirth)
    +      {
    +              try
    +              {
    +                      // Delevel.
    +                      player.removeExpAndSp(player.getExp() - Experience.LEVEL[Config.REBIRTH_RETURN_TO_LEVEL], 0);
    +                     
    +                      // Back to the first class.
    +                      player.setClassId(player.getClassId().getFirstClass().getId());
    +                     
    +                      // Send the Server->Client packet StatusUpdate with current HP, MP and CP to this L2PcInstance
    +                      player.broadcastStatusUpdate();
    +                     
    +                      // Broadcast informations from a user to himself and his knownlist.
    +                      player.broadcastUserInfo();
    +                     
    +                      // Remove the player's current skills.
    +                      for (L2Skill skill : player.getAllSkills())
    +                              player.removeSkill(skill);
    +                     
    +                      // Give all available skills to the player.
    +                      player.giveAvailableSkills();
    +                     
    +                      // Update L2PcInstance stats in the characters table of the database.
    +                      player.store();
    +                     
    +                      if (firstBirth)
    +                              // Stores the player's information in the DB.
    +                              storePlayerBirth(player);
    +                      else
    +                              // Updates the player's information in the DB.
    +                              updatePlayerBirth(player, newBirthCount);
    +                     
    +                      // Displays a congratulation window to the player.
    +                      NpcHtmlMessage html = new NpcHtmlMessage(getObjectId());
    +                      html.setFile("data/html/managers/rebirth-successfully.htm");
    +                      html.replace("%level%", "" + Config.REBIRTH_RETURN_TO_LEVEL + "");
    +                     
    +                      player.sendPacket(html);
    +              }
    +              catch (Exception e)
    +              {
    +                      e.printStackTrace();
    +              }
    +      }
    +     
    +      /**
    +        * Rewards the player with an item.
    +        *
    +        * @param player the player
    +        * @param itemId : Identifier of the item.
    +        * @param itemCount : Quantity of items to add.
    +        */
    +      public static void rebirthItemReward(L2PcInstance player, int itemId, int itemCount)
    +      {
    +              // Incorrect amount.
    +              if (itemCount <= 0)
    +                      return;
    +             
    +              final L2ItemInstance item = player.getInventory().addItem("Quest", itemId, itemCount, player, player);
    +              if (item == null)
    +                      return;
    +             
    +              // Send message to the client.
    +              if (itemId == 57)
    +              {
    +                      SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S1_ADENA);
    +                      smsg.addItemNumber(itemCount);
    +                      player.sendPacket(smsg);
    +              }
    +              else
    +              {
    +                      if (itemCount > 1)
    +                      {
    +                              SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S);
    +                              smsg.addItemName(itemId);
    +                              smsg.addItemNumber(itemCount);
    +                              player.sendPacket(smsg);
    +                      }
    +                      else
    +                      {
    +                              SystemMessage smsg = SystemMessage.getSystemMessage(SystemMessageId.EARNED_ITEM_S1);
    +                              smsg.addItemName(itemId);
    +                              player.sendPacket(smsg);
    +                      }
    +              }
    +             
    +              // Send status update packet.
    +              StatusUpdate su = new StatusUpdate(player);
    +              su.addAttribute(StatusUpdate.CUR_LOAD, player.getCurrentLoad());
    +              player.sendPacket(su);
    +      }
    +     
    +      /**
    +        * Return the player's current Rebirth Level.
    +        *
    +        * @param player the player
    +        * @return the rebirth level
    +        */
    +      public static int getRebirthLevel(L2PcInstance player)
    +      {
    +              int playerId = player.getObjectId();
    +              if (_rebirthInfo.get(playerId) == null)
    +                      loadRebirthInfo(player);
    +             
    +              return _rebirthInfo.get(playerId);
    +      }
    +     
    +      /**
    +        * Database caller to retrieve player's current Rebirth Level.
    +        *
    +        * @param player the player
    +        */
    +      public static void loadRebirthInfo(L2PcInstance player)
    +      {
    +              int playerId = player.getObjectId(), rebirthCount = 0;
    +             
    +              try (Connection con = L2DatabaseFactory.getInstance().getConnection())
    +              {
    +                      ResultSet rset;
    +                      PreparedStatement statement = con.prepareStatement("SELECT * FROM `character_rebirths` WHERE playerId = ?");
    +                      statement.setInt(1, playerId);
    +                      rset = statement.executeQuery();
    +                     
    +                      while (rset.next())
    +                      {
    +                              rebirthCount = rset.getInt("rebirthCount");
    +                      }
    +                     
    +                      rset.close();
    +                      statement.close();
    +              }
    +              catch (Exception e)
    +              {
    +                      e.printStackTrace();
    +              }
    +              _rebirthInfo.put(playerId, rebirthCount);
    +      }
    +     
    +      /**
    +        * Stores the player's information in the DB.
    +        *
    +        * @param player the player
    +        */
    +      public static void storePlayerBirth(L2PcInstance player)
    +      {
    +              try (Connection con = L2DatabaseFactory.getInstance().getConnection())
    +              {
    +                      PreparedStatement statement = con.prepareStatement("INSERT INTO `character_rebirths` (playerId,rebirthCount) VALUES (?,1)");
    +                      statement.setInt(1, player.getObjectId());
    +                      statement.execute();
    +                     
    +                      _rebirthInfo.put(player.getObjectId(), 1);
    +              }
    +              catch (Exception e)
    +              {
    +                      e.printStackTrace();
    +              }
    +      }
    +     
    +      /**
    +        * Updates the player's information in the DB.
    +        *
    +        * @param player the player
    +        * @param newRebirthCount the new rebirth count
    +        */
    +      public static void updatePlayerBirth(L2PcInstance player, int newRebirthCount)
    +      {
    +              int playerId = player.getObjectId();
    +             
    +              try (Connection con = L2DatabaseFactory.getInstance().getConnection())
    +              {
    +                      PreparedStatement statement = con.prepareStatement("UPDATE `character_rebirths` SET rebirthCount = ? WHERE playerId = ?");
    +                      statement.setInt(1, newRebirthCount);
    +                      statement.setInt(2, playerId);
    +                      statement.execute();
    +                     
    +                      _rebirthInfo.put(playerId, newRebirthCount);
    +              }
    +              catch (Exception e)
    +              {
    +                      e.printStackTrace();
    +              }
    +      }
    +}
    \ No newline at end of file
    Index: java/net/sf/l2j/gameserver/network/clientpackets/RequestAcquireSkill.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/network/clientpackets/RequestAcquireSkill.java  (revision 4)
    +++ java/net/sf/l2j/gameserver/network/clientpackets/RequestAcquireSkill.java  (working copy)
    @@ -17,8 +17,8 @@
    import net.sf.l2j.Config;
    import net.sf.l2j.gameserver.datatables.SkillTable;
    import net.sf.l2j.gameserver.datatables.SkillTreeTable;
    -import net.sf.l2j.gameserver.datatables.SpellbookTable;
    import net.sf.l2j.gameserver.model.L2PledgeSkillLearn;
    +import net.sf.l2j.gameserver.model.L2RebirthSkillLearn;
    import net.sf.l2j.gameserver.model.L2ShortCut;
    import net.sf.l2j.gameserver.model.L2Skill;
    import net.sf.l2j.gameserver.model.L2SkillLearn;
    @@ -80,7 +80,7 @@
                    // Types.
                    switch (_skillType)
                    {
    -                      case 0: // General skills.
    +                      case 0: // Trance's Rebirth skills.
                                    // Player already has such skill with same or higher level.
                                    int skillLvl = activeChar.getSkillLevel(_skillId);
                                    if (skillLvl >= _skillLevel)
    @@ -90,16 +90,17 @@
                                    if (Math.max(skillLvl, 0) + 1 != _skillLevel)
                                            return;
                                 
    -                              int spCost = 0;
    +                              int spCost = 0, idItem = 0;
                                 
                                    // Find skill information.
    -                              for (L2SkillLearn sl : SkillTreeTable.getInstance().getAvailableSkills(activeChar, activeChar.getSkillLearningClassId()))
    +                              for (L2RebirthSkillLearn rsl : SkillTreeTable.getInstance().getAvailableRebirthSkills(activeChar, activeChar.getSkillLearningClassId()))
                                    {
                                            // Skill found.
    -                                      if (sl.getId() == _skillId && sl.getLevel() == _skillLevel)
    +                                      if (rsl.getId() == _skillId && rsl.getLevel() == _skillLevel)
                                            {
                                                    exists = true;
    -                                              spCost = sl.getSpCost();
    +                                              idItem = rsl.getItemId();
    +                                              spCost = rsl.getCostSp();
                                                    break;
                                            }
                                    }
    @@ -116,11 +117,10 @@
                                            return;
                                    }
                                 
    -                              // Get spellbook and try to consume it.
    -                              int spbId = SpellbookTable.getInstance().getBookForSkill(_skillId, _skillLevel);
    -                              if (spbId > 0)
    +                              // Get item and try to consume it.
    +                              if (idItem > 0)
                                    {
    -                                      if (!activeChar.destroyItemByItemId("SkillLearn", spbId, 1, trainer, true))
    +                                      if (!activeChar.destroyItemByItemId("SkillLearn", idItem, 1, trainer, false))
                                            {
                                                    activeChar.sendPacket(SystemMessageId.ITEM_MISSING_TO_LEARN_SKILL);
                                                    L2NpcInstance.showSkillList(activeChar, trainer, activeChar.getSkillLearningClassId());
    Index: java/net/sf/l2j/gameserver/model/actor/instance/L2NpcInstance.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2NpcInstance.java  (revision 4)
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2NpcInstance.java  (working copy)
    @@ -19,11 +19,11 @@
    import net.sf.l2j.gameserver.datatables.SkillTable;
    import net.sf.l2j.gameserver.datatables.SkillTable.FrequentSkill;
    import net.sf.l2j.gameserver.datatables.SkillTreeTable;
    +import net.sf.l2j.gameserver.model.L2RebirthSkillLearn;
    import net.sf.l2j.gameserver.model.L2Effect;
    import net.sf.l2j.gameserver.model.L2EnchantSkillData;
    import net.sf.l2j.gameserver.model.L2EnchantSkillLearn;
    import net.sf.l2j.gameserver.model.L2Skill;
    -import net.sf.l2j.gameserver.model.L2SkillLearn;
    import net.sf.l2j.gameserver.model.actor.L2Npc;
    import net.sf.l2j.gameserver.model.actor.status.FolkStatus;
    import net.sf.l2j.gameserver.model.base.ClassId;
    @@ -99,13 +99,13 @@
                    AcquireSkillList asl = new AcquireSkillList(AcquireSkillList.SkillType.Usual);
                    boolean empty = true;
                 
    -              for (L2SkillLearn sl : SkillTreeTable.getInstance().getAvailableSkills(player, classId))
    +              for (L2RebirthSkillLearn rsl : SkillTreeTable.getInstance().getAvailableRebirthSkills(player, classId))
                    {
    -                      L2Skill sk = SkillTable.getInstance().getInfo(sl.getId(), sl.getLevel());
    +                      L2Skill sk = SkillTable.getInstance().getInfo(rsl.getId(), rsl.getLevel());
                            if (sk == null)
                                    continue;
                         
    -                      asl.addSkill(sl.getId(), sl.getLevel(), sl.getLevel(), sl.getSpCost(), 0);
    +                      asl.addSkill(rsl.getId(), rsl.getLevel(), rsl.getLevel(), rsl.getCostSp(), 0);
                            empty = false;
                    }
                 
    Index: config/events.properties
    ===================================================================
    --- config/events.properties    (revision 4)
    +++ config/events.properties    (working copy)
    @@ -251,4 +251,19 @@
    AltFishChampionshipReward2 = 500000
    AltFishChampionshipReward3 = 300000
    AltFishChampionshipReward4 = 200000
    -AltFishChampionshipReward5 = 100000
    \ No newline at end of file
    +AltFishChampionshipReward5 = 100000
    +
    +#================================================================
    +#                    Trance's Rebirth Manager
    +#================================================================
    +# Minimum level for Rebirth
    +RebirthMinLevel = 78
    +
    +# Maximum rebirth's allowed
    +RebirthMaxAllowed = 3
    +
    +# Return to level
    +RebirthReturnToLevel = 1
    +
    +# Rebirth items
    +RebirthItems = 2822,1;2822,1;2822,1;
    \ No newline at end of file
    Index: java/net/sf/l2j/gameserver/datatables/SkillTreeTable.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/datatables/SkillTreeTable.java  (revision 4)
    +++ java/net/sf/l2j/gameserver/datatables/SkillTreeTable.java  (working copy)
    @@ -26,6 +26,7 @@
    import net.sf.l2j.gameserver.model.L2EnchantSkillData;
    import net.sf.l2j.gameserver.model.L2EnchantSkillLearn;
    import net.sf.l2j.gameserver.model.L2PledgeSkillLearn;
    +import net.sf.l2j.gameserver.model.L2RebirthSkillLearn;
    import net.sf.l2j.gameserver.model.L2Skill;
    import net.sf.l2j.gameserver.model.L2SkillLearn;
    import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
    @@ -46,6 +47,7 @@
            private List<L2PledgeSkillLearn> _pledgeSkillTrees;
            private Map<Integer, L2EnchantSkillData> _enchantSkillData;
            private List<L2EnchantSkillLearn> _enchantSkillTrees;
    +      private List<L2RebirthSkillLearn> _rebirthSkillTrees;
         
            public static SkillTreeTable getInstance()
            {
    @@ -207,10 +209,43 @@
                            _log.severe("PledgeTable: Error while loading pledge skills: " + e);
                    }
                 
    +              // Rebirth skills tree
    +              try
    +              {
    +                      _rebirthSkillTrees = new ArrayList<>();
    +                     
    +                      File f = new File("./data/xml/skillstrees/rebirth_skills_tree.xml");
    +                      Document doc = XMLDocumentFactory.getInstance().loadDocument(f);
    +                     
    +                      for (Node list = doc.getFirstChild().getFirstChild(); list != null; list = list.getNextSibling())
    +                      {
    +                              if ("skill".equalsIgnoreCase(list.getNodeName()))
    +                              {
    +                                      NamedNodeMap skillAttr = list.getAttributes();
    +                                     
    +                                      int skillId = Integer.parseInt(skillAttr.getNamedItem("id").getNodeValue());
    +                                      int skillLvl = Integer.parseInt(skillAttr.getNamedItem("lvl").getNodeValue());
    +                                      int costSp = Integer.valueOf(skillAttr.getNamedItem("sp").getNodeValue());
    +                                      int itemId = 0;
    +                                     
    +                                      Node att = skillAttr.getNamedItem("itemId");
    +                                      if (att != null)
    +                                              itemId = Integer.valueOf(att.getNodeValue());
    +                                     
    +                                      _rebirthSkillTrees.add(new L2RebirthSkillLearn(skillId, skillLvl, costSp, itemId));
    +                              }
    +                      }
    +              }
    +              catch (Exception e)
    +              {
    +                      _log.severe("RebirthTable: Error while loading rebirth skills: " + e);
    +              }
    +             
                    _log.config("FishingSkillTreeTable: Loaded " + _fishingSkillTrees.size() + " general skills.");
                    _log.config("DwarvenCraftSkillTreeTable: Loaded " + _expandDwarvenCraftSkillTrees.size() + " dwarven skills.");
                    _log.config("EnchantSkillTreeTable: Loaded " + _enchantSkillData.size() + " enchant types and " + _enchantSkillTrees.size() + " enchant skills.");
                    _log.config("PledgeSkillTreeTable: Loaded " + _pledgeSkillTrees.size() + " pledge skills.");
    +              _log.config("RebirthSkillTreeTable: Loaded " + _rebirthSkillTrees.size() + " rebirth skills.");
            }
         
            /**
    @@ -509,6 +544,39 @@
                    return result;
            }
         
    +      /**
    +        * @param cha L2PcInstance, player whom skills are compared.
    +        * @param classId
    +        * @return list of available rebirth skills for L2PcInstance.
    +        */
    +      public List<L2RebirthSkillLearn> getAvailableRebirthSkills(L2PcInstance cha, ClassId classId)
    +      {
    +              List<L2RebirthSkillLearn> result = new ArrayList<>();
    +             
    +              L2Skill[] chaSkills = cha.getAllSkills();
    +             
    +              for (L2RebirthSkillLearn rsl : _rebirthSkillTrees)
    +              {
    +                      boolean found = false;
    +                     
    +                      for (L2Skill s : chaSkills)
    +                      {
    +                              if (s.getId() == rsl.getId())
    +                              {
    +                                      if (s.getLevel() == rsl.getLevel() - 1)
    +                                              result.add(rsl);
    +                                     
    +                                      found = true;
    +                                      break;
    +                              }
    +                      }
    +                     
    +                      if (!found && rsl.getLevel() == 1)
    +                              result.add(rsl);
    +              }
    +              return result;
    +      }
    +     
            public int getMinSkillLevel(int skillId, int skillLvl)
            {
                    int skillHashCode = SkillTable.getSkillHashCode(skillId, skillLvl);
    Index: java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java  (revision 4)
    +++ java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java  (working copy)
    @@ -5643,16 +5643,6 @@
                                                                    player._classIndex = subClass.getClassIndex();
                                            }
                                    }
    -                              if (player.getClassIndex() == 0 && activeClassId != player.getBaseClass())
    -                              {
    -                                      // Subclass in use but doesn't exist in DB -
    -                                      // a possible restart-while-modifysubclass cheat has been attempted.
    -                                      // Switching to use base class
    -                                      player.setClassId(player.getBaseClass());
    -                                      _log.warning("Player " + player.getName() + " reverted to base class. Possibly has tried a relogin exploit while subclassing.");
    -                              }
    -                              else
    -                                      player._activeClass = activeClassId;
                                 
                                    player.setApprentice(rset.getInt("apprentice"));
                                    player.setSponsor(rset.getInt("sponsor"));
    Index: java/net/sf/l2j/gameserver/model/actor/L2Character.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/model/actor/L2Character.java    (revision 4)
    +++ java/net/sf/l2j/gameserver/model/actor/L2Character.java    (working copy)
    @@ -4515,6 +4515,10 @@
                    if (skill == null)
                            return null;
                 
    +              // Skip the rebirth skills.
    +              if (skill.getId() >= 549 && skill.getId() <= 560)
    +                      return null;
    +             
                    return removeSkill(skill.getId(), true);
            }
         
    Index: java/net/sf/l2j/Config.java
    ===================================================================
    --- java/net/sf/l2j/Config.java (revision 4)
    +++ java/net/sf/l2j/Config.java (working copy)
    @@ -225,6 +225,12 @@
            public static int ALT_FISH_CHAMPIONSHIP_REWARD_4;
            public static int ALT_FISH_CHAMPIONSHIP_REWARD_5;
         
    +      /** Trance's Rebirth Manager */
    +      public static int REBIRTH_MIN_LEVEL;
    +      public static int REBIRTH_MAX;
    +      public static int REBIRTH_RETURN_TO_LEVEL;
    +      public static String[] REBIRTH_ITEMS;
    +     
            // --------------------------------------------------
            // HexID
            // --------------------------------------------------
    @@ -870,6 +876,11 @@
                            ALT_FISH_CHAMPIONSHIP_REWARD_4 = events.getProperty("AltFishChampionshipReward4", 200000);
                            ALT_FISH_CHAMPIONSHIP_REWARD_5 = events.getProperty("AltFishChampionshipReward5", 100000);
                         
    +                      REBIRTH_MIN_LEVEL = events.getProperty("RebirthMinLevel", 78);
    +                      REBIRTH_MAX = events.getProperty("RebirthMaxAllowed", 3);
    +                      REBIRTH_RETURN_TO_LEVEL = events.getProperty("RebirthReturnToLevel", 1);
    +                      REBIRTH_ITEMS = events.getProperty("RebirthItems", "").split(";");
    +                     
                            // FloodProtector
                            ExProperties security = load(FLOOD_PROTECTOR_FILE);
                            loadFloodProtectorConfig(security, FLOOD_PROTECTOR_ROLL_DICE, "RollDice", "42");
    Index: java/net/sf/l2j/gameserver/model/L2RebirthSkillLearn.java
    ===================================================================
    --- java/net/sf/l2j/gameserver/model/L2RebirthSkillLearn.java  (revision 0)
    +++ java/net/sf/l2j/gameserver/model/L2RebirthSkillLearn.java  (working copy)
    @@ -0,0 +1,55 @@
    +/*
    + * 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.model;
    +
    +/**
    + * @author Trance
    + * @skype chr.trance
    + */
    +public final class L2RebirthSkillLearn
    +{
    +      private final int _id;
    +      private final int _level;
    +      private final int _costSp;
    +      private final int _itemId;
    +     
    +      public L2RebirthSkillLearn(int id, int lvl, int costSp, int itemId)
    +      {
    +              _id = id;
    +              _level = lvl;
    +              _costSp = costSp;
    +              _itemId = itemId;
    +      }
    +     
    +      public int getId()
    +      {
    +              return _id;
    +      }
    +     
    +      public int getLevel()
    +      {
    +              return _level;
    +      }
    +     
    +      public int getCostSp()
    +      {
    +              return _costSp;
    +      }
    +     
    +      public int getItemId()
    +      {
    +              return _itemId;
    +      }
    +}
    \ No newline at end of file


Datapack Patch:

Código:

       

    ### Eclipse Workspace Patch 1.0
    #P aCis_datapack
    Index: tools/database_installer.sh
    ===================================================================
    --- tools/database_installer.sh (revision 4)
    +++ tools/database_installer.sh (working copy)
    @@ -90,6 +90,7 @@
    $MYG < ../sql/character_mail.sql &> /dev/null
    $MYG < ../sql/character_quests.sql &> /dev/null
    $MYG < ../sql/character_raid_points.sql &> /dev/null
    +$MYG < ../sql/character_rebirths.sql &> /dev/null
    $MYG < ../sql/character_recipebook.sql &> /dev/null
    $MYG < ../sql/character_recommends.sql &> /dev/null
    $MYG < ../sql/character_shortcuts.sql &> /dev/null
    Index: data/xml/skills/0500-0599.xml
    ===================================================================
    --- data/xml/skills/0500-0599.xml      (revision 0)
    +++ data/xml/skills/0500-0599.xml      (working copy)
    @@ -0,0 +1,147 @@
    +<?xml version='1.0' encoding='utf-8'?>
    +<list>
    +      <skill id="549" levels="3" name="Rebirth Guidance">
    +              <!-- Lv 1: Increases accuracy by 5%. -->
    +              <!-- Lv 2: Increases accuracy by 10%. -->
    +              <!-- Lv 3: Increases accuracy by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="accCombat" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="550" levels="3" name="Rebirth Haste">
    +              <!-- Lv 1: Increases Atk. Spd. by 5%. -->
    +              <!-- Lv 2: Increases Atk. Spd. by 10%. -->
    +              <!-- Lv 3: Increases Atk. Spd. by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="pAtkSpd" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="551" levels="3" name="Rebirth Health">
    +              <!-- Lv 1: Increases HP by 10%. -->
    +              <!-- Lv 2: Increases HP by 20%. -->
    +              <!-- Lv 3: Increases HP by 30%. -->
    +              <table name="#reb"> 1.1 1.2 1.3 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="maxHp" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="552" levels="3" name="Rebirth Mana">
    +              <!-- Lv 1: Increases MP by 10%. -->
    +              <!-- Lv 2: Increases MP by 20%. -->
    +              <!-- Lv 3: Increases MP by 30%. -->
    +              <table name="#reb"> 1.1 1.2 1.3 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="maxMp" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="553" levels="3" name="Rebirth Wind Walk">
    +              <!-- Lv 1: Increases speed by 5%. -->
    +              <!-- Lv 2: Increases speed by 10%. -->
    +              <!-- Lv 3: Increases speed by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="runSpd" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="554" levels="3" name="Rebirth Focus">
    +              <!-- Lv 1: Increases critical attack rate by 15. -->
    +              <!-- Lv 2: Increases critical attack rate by 30. -->
    +              <!-- Lv 3: Increases critical attack rate by 45. -->
    +              <table name="#reb"> 15 30 45 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <add order="0x40" stat="rCrit" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="555" levels="3" name="Rebirth Might">
    +              <!-- Lv 1: Increases P. Atk. by 5%. -->
    +              <!-- Lv 2: Increases P. Atk. by 10%. -->
    +              <!-- Lv 3: Increases P. Atk. by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="pAtk" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="556" levels="3" name="Rebirth Empower">
    +              <!-- Lv 1: Increases M. Atk. by 5%. -->
    +              <!-- Lv 2: Increases M. Atk. by 10%. -->
    +              <!-- Lv 3: Increases M. Atk. by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="mAtk" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="557" levels="3" name="Rebirth Shield">
    +              <!-- Lv 1: Increases P. Def. by 5%. -->
    +              <!-- Lv 2: Increases P. Def. by 10%. -->
    +              <!-- Lv 3: Increases P. Def. by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="pDef" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="558" levels="3" name="Rebirth Magic Barrier">
    +              <!-- Lv 1: Increases M. Def. by 5%. -->
    +              <!-- Lv 2: Increases M. Def. by 10%. -->
    +              <!-- Lv 3: Increases M. Def. by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="mDef" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="559" levels="3" name="Rebirth Agility">
    +              <!-- Lv 1: Increases Evasion by 6. -->
    +              <!-- Lv 2: Increases Evasion by 11. -->
    +              <!-- Lv 3: Increases Evasion by 17. -->
    +              <table name="#reb"> 6 11 17 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <add order="0x10" stat="rEvas" val="#reb"/>
    +              </for>
    +      </skill>
    +      <skill id="560" levels="3" name="Rebirth Acumen">
    +              <!-- Lv 1: Increases Casting Speed by 5%. -->
    +              <!-- Lv 2: Increases Casting Speed by 10%. -->
    +              <!-- Lv 3: Increases Casting Speed by 15%. -->
    +              <table name="#reb"> 1.05 1.1 1.15 </table>
    +              <set name="target" val="TARGET_SELF"/>
    +              <set name="skillType" val="BUFF"/>
    +              <set name="operateType" val="OP_PASSIVE"/>
    +              <for>
    +                      <mul order="0x30" stat="mAtkSpd" val="#reb"/>
    +              </for>
    +      </skill>
    +</list>
    \ No newline at end of file
    Index: sql/character_rebirths.sql
    ===================================================================
    --- sql/character_rebirths.sql  (revision 0)
    +++ sql/character_rebirths.sql  (working copy)
    @@ -0,0 +1,8 @@
    +SET FOREIGN_KEY_CHECKS=0;
    +
    +DROP TABLE IF EXISTS `character_rebirths`;
    +CREATE TABLE `character_rebirths` (
    +  `playerId` int(20) NOT NULL,
    +  `rebirthCount` int(2) NOT NULL,
    +  PRIMARY KEY (`playerId`)
    +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    \ No newline at end of file
    Index: data/xml/skillstrees/rebirth_skills_tree.xml
    ===================================================================
    --- data/xml/skillstrees/rebirth_skills_tree.xml        (revision 0)
    +++ data/xml/skillstrees/rebirth_skills_tree.xml        (working copy)
    @@ -0,0 +1,39 @@
    +<?xml version='1.0' encoding='utf-8'?>
    +<list>
    +      <skill id="549" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Guidance -->
    +      <skill id="549" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Guidance -->
    +      <skill id="549" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Guidance -->
    +      <skill id="550" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Haste -->
    +      <skill id="550" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Haste -->
    +      <skill id="550" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Haste -->
    +      <skill id="551" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Health -->
    +      <skill id="551" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Health -->
    +      <skill id="551" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Health -->
    +      <skill id="552" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Mana -->
    +      <skill id="552" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Mana -->
    +      <skill id="552" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Mana -->
    +      <skill id="553" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Wind Walk -->
    +      <skill id="553" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Wind Walk -->
    +      <skill id="553" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Wind Walk -->
    +      <skill id="554" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Focus -->
    +      <skill id="554" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Focus -->
    +      <skill id="554" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Focus -->
    +      <skill id="555" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Might -->
    +      <skill id="555" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Might -->
    +      <skill id="555" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Might -->
    +      <skill id="556" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Empower -->
    +      <skill id="556" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Empower -->
    +      <skill id="556" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Empower -->
    +      <skill id="557" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Shield -->
    +      <skill id="557" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Shield -->
    +      <skill id="557" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Shield -->
    +      <skill id="558" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Magic Barrier -->
    +      <skill id="558" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Magic Barrier -->
    +      <skill id="558" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Magic Barrier -->
    +      <skill id="559" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Agility -->
    +      <skill id="559" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Agility -->
    +      <skill id="559" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Agility -->
    +      <skill id="560" lvl="1" sp="100" itemId="2822"/> <!-- Rebirth Acumen -->
    +      <skill id="560" lvl="2" sp="100" itemId="2822"/> <!-- Rebirth Acumen -->
    +      <skill id="560" lvl="3" sp="100" itemId="2822"/> <!-- Rebirth Acumen -->
    +</list>
    \ No newline at end of file
    Index: data/html/managers/rebirth-max.htm
    ===================================================================
    --- data/html/managers/rebirth-max.htm  (revision 0)
    +++ data/html/managers/rebirth-max.htm  (working copy)
    @@ -0,0 +1,8 @@
    +<html>
    +<body>
    +      <center><font color="FF9900">Rebirth Manager</font></center>
    +      <img src="L2UI.SquareWhite" width="280" height="1"><br>
    +      &nbsp;You can't perform another rebirth. There's a maximum of<br1>
    +      &nbsp;3 rebirths, that you've already reached.
    +</body>
    +</html>
    \ No newline at end of file
    Index: data/html/managers/rebirth-successfully.htm
    ===================================================================
    --- data/html/managers/rebirth-successfully.htm (revision 0)
    +++ data/html/managers/rebirth-successfully.htm (working copy)
    @@ -0,0 +1,7 @@
    +<html>
    +<body>
    +      <center><font color="FF9900">Rebirth Manager</font></center>
    +      <img src="L2UI.SquareWhite" width="280" height="1"><br>
    +      &nbsp;Your character has been reset successfully to level %level%.
    +</body>
    +</html>
    \ No newline at end of file
    Index: tools/database_installer.bat
    ===================================================================
    --- tools/database_installer.bat        (revision 4)
    +++ tools/database_installer.bat        (working copy)
    @@ -69,6 +69,7 @@
    %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_mail.sql
    %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_quests.sql
    %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_raid_points.sql
    +%mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_rebirths.sql
    %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_recipebook.sql
    %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_recommends.sql
    %mysqlPath% -h %gshost% -u %gsuser% --password=%gspass% -D %gsdb% < ../sql/character_shortcuts.sql
    Index: data/html/managers/rebirth.htm
    ===================================================================
    --- data/html/managers/rebirth.htm      (revision 0)
    +++ data/html/managers/rebirth.htm      (working copy)
    @@ -0,0 +1,23 @@
    +<html>
    +<body>
    +      <center><font color="FF9900">Rebirth Manager</font></center>
    +      <img src="L2UI.SquareWhite" width="280" height="1"><br>
    +      <table>
    +              <tr>
    +                      <td>&nbsp;A rebirth can be performed to obtain a <font color="FF9900">book of rebirth</font>.<br1>
    +                      &nbsp;A character can perform 3 rebirths.<br></td>
    +              </tr>
    +              <tr>
    +                      <td>&nbsp;A <font color="FF9900">book of rebirth</font> can be used to create a Rebirth Cloak<br1>
    +                      &nbsp;(with extraordinary skills).<br></td>
    +              </tr>
    +              <tr>
    +                      <td>&nbsp;A rebirth is a new birth, again you will become a novice<br1>
    +                      &nbsp;player (lv %lv%), without any skills. You will keep your items.<br><br><br></td>
    +              </tr>
    +              <tr>
    +                      <td><center><a action="bypass -h npc_%objectId%_performRebirth">Perform a rebirth</a></center></td>
    +              </tr>
    +      </table>
    +</body>
    +</html>
    \ No newline at end of file
    Index: data/xml/npcs/npcs.xml
    ===================================================================
    --- data/xml/npcs/npcs.xml      (revision 4)
    +++ data/xml/npcs/npcs.xml      (working copy)
    @@ -300199,4 +300199,36 @@
                            <skill id="4416" level="16"/>
                    </skills>
            </npc>
    +      <npc id="50008" idTemplate="30523" name="Selenor" title="Rebirth Manager">
    +              <set name="level" val="70"/>
    +              <set name="radius" val="7.0"/>
    +              <set name="height" val="16.5"/>
    +              <set name="rHand" val="0"/>
    +              <set name="lHand" val="0"/>
    +              <set name="type" val="L2Rebirth"/>
    +              <set name="exp" val="0"/>
    +              <set name="sp" val="0"/>
    +              <set name="hp" val="2444.46819"/>
    +              <set name="mp" val="1345.8"/>
    +              <set name="hpRegen" val="7.5"/>
    +              <set name="mpRegen" val="2.7"/>
    +              <set name="pAtk" val="688.86373"/>
    +              <set name="pDef" val="700.91597"/>
    +              <set name="mAtk" val="470.40463"/>
    +              <set name="mDef" val="700.53847"/>
    +              <set name="crit" val="4"/>
    +              <set name="atkSpd" val="253"/>
    +              <set name="str" val="22"/>
    +              <set name="int" val="41"/>
    +              <set name="dex" val="21"/>
    +              <set name="wit" val="20"/>
    +              <set name="con" val="27"/>
    +              <set name="men" val="20"/>
    +              <set name="corpseTime" val="7"/>
    +              <set name="walkSpd" val="33"/>
    +              <set name="runSpd" val="120"/>
    +              <set name="dropHerbGroup" val="0"/>
    +              <set name="attackRange" val="40"/>
    +              <ai type="mage" ssCount="0" ssRate="0" spsCount="0" spsRate="0" aggro="0" clan="" clanRange="0" clanIgnore="" canMove="false" seedable="false"/>
    +      </npc>
    </list>
    Index: data/html/managers/rebirth-level.htm
    ===================================================================
    --- data/html/managers/rebirth-level.htm        (revision 0)
    +++ data/html/managers/rebirth-level.htm        (working copy)
    @@ -0,0 +1,7 @@
    +<html>
    +<body>
    +      <center><font color="FF9900">Rebirth Manager</font></center>
    +      <img src="L2UI.SquareWhite" width="280" height="1"><br>
    +      &nbsp;Sorry, your can't perform a rebirth if you're not level 78.
    +</body>
    +</html>
    \ No newline at end of file

Client Side:
[Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]


Senha: www.secretexperience.net


Developed by Tяαnce

RedHoT 29-09-2013 12:22 PM

Seto, poderia adicionar prefixo para a revisão aCis (muito utilizada atualmente) e "Outras" para revisões que não estejam na lista, pois Tutoriais fica sem sentido.

Abraço.

Edit: o Datapack patch tá errado! Está com o core patch também.

Setokaiba 29-09-2013 06:40 PM

Citação:

Postado Originalmente por RedHoT (Post 164023)
Seto, poderia adicionar prefixo para a revisão aCis (muito utilizada atualmente) e "Outras" para revisões que não estejam na lista, pois Tutoriais fica sem sentido.

Abraço.

Edit: o Datapack patch tá errado! Está com o core patch também.

Corrigido.

Sugestões implementadas.


Horários baseados na GMT -3. Agora são 12:54 AM.

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