Tópico: [Outros] Rebirth Manager
Ver um Único Post
Antigo 29-09-2013, 11:44 AM   #1 (permalink)
Setokaiba
Jesus Te Ama, Mas EU Não!
 
Avatar de Setokaiba
 
Registrado em: Oct 2008
Localização: 45º 33º 34º N | 122º 41º 41º W DESTINATION: ANYWHERE Adidas
Posts: 4,133
Agradeceu: 837
Agradecido 6,058 Vezes em 2,106 Posts
Achei Ruim:
Acharam ruim Vezes em Posts
Meu Estado:
Pontos: 20,442, Nível: 90
Pontos: 20,442, Nível: 90 Pontos: 20,442, Nível: 90 Pontos: 20,442, Nível: 90
Atividade: 99%
Atividade: 99% Atividade: 99% Atividade: 99%

Nome Real: Anderson Andrade

Inventório de Setokaiba Usuário possui 1x Lock Fan Usuário possui 1x Oakley Usuário possui 1x Apple Inc. Fan/User Usuário possui 1x Honda Usuário possui 1x Windows Seven User

Padrão 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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
	

    ### 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: [Somente Usuários Registrados Podem Visualizar os Links Desta PáginaClique aqui para se Registrar]
	

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

Setokaiba está online agora  
Os Seguintes 3 Usuários disseram Obrigado(a) para Setokaiba por gostarem deste post :
RedHoT (29-09-2013), renat0- (02-02-2015), WilliamFS (29-09-2013)
Links Patrocinados