-
Posts
157 -
Credits
0 -
Joined
-
Last visited
-
Feedback
0%
About Junkee
Profile Information
-
Current Mood
Bored
-
Gender
Male
-
Country
Romania
-
Location
Bucharest
Junkee's Achievements
-
Hello, i`m newbie with java codes and i want to beg someone if can help me with any protection that is free(something like rGuard or CatsGuard) adapted for L2jAcis. I will appreciate. Thank you
-
I have a problem that appear in my console and i dont know how to fix it. Can someone give me a hand? thanks a lot Exception in thread "AISTPool-7" java.lang.NullPointerException at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.doDie(L2PcIns tance.java:4122) at net.sf.l2j.gameserver.model.actor.status.PcStatus.reduceHp(PcStatus.j ava:218) at net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.reduceCurrent Hp(L2PcInstance.java:9085) at net.sf.l2j.gameserver.model.actor.L2Character.reduceCurrentHp(L2Chara cter.java:5683) at net.sf.l2j.gameserver.model.actor.L2Character.onHitTimer(L2Character. java:4155) at net.sf.l2j.gameserver.model.actor.L2Character$HitTask.run(L2Character .java:2150) at net.sf.l2j.gameserver.ThreadPoolManager$RunnableWrapper.run(ThreadPoo lManager.java:85) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:47 1) at java.util.concurrent.FutureTask.run(FutureTask.java:262) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask. access$201(ScheduledThreadPoolExecutor.java:178) at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask. run(ScheduledThreadPoolExecutor.java:292) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor. java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor .java:615) at java.lang.Thread.run(Thread.java:745)
-
Can you give some details? i am newbie with eclipse but i`m trying to learn so don`t be mad, i will appreciate you help. Thank you P.S my pack it is based on 315 rev. so i cant apply diff patches since i don`t have any patch till 330 rev
-
Thank you SweeTs, it works perfect. Another thing, if you can help me since you are the only one who is most active here :). How can i update to the last rev of Acis project?. (i have access to the last rev) Thank you very much for your help Best regards
-
Hello developers, i know that is annoying but if someone can give me a hand... i have trance pack and i dont know how import the source in to Eclipse. I am still a newbie with compiling with eclipse and other stuffs. Can someone give me a hand how to import source and compiling after? thanks a lot P.S source look like this
-
Trance's Rebirth Manager (Help Needed)
Junkee posted a question in Request Server Development Help [L2J]
Hello guys, I need help with this: http://www.maxcheaters.com/topic/158570-trances-rebirth-manager/ Originally, once I perform the rebirth, character level is decreased to level 1 and it turns to first class. I need to modify this, as that, once the rebirth is done, the charachter should keep the third class status and get the level 1 skills. It just needs a few code modifications that I can't manage how to do them (java newbie :P). Hope you can help me with that. PS: Sorry for my bad english, and don't think i'm planning to open a live server, I just want to play with some friends (old l2gold players) Cheers, - Junkee This is the code: ### 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- 1 reply
-
- rebirth system
- rebirth
-
(and 1 more)
Tagged with:
-
Hello people, I'm looking for a good L2J interlude server pack, because i want to open a server which can hold around 400-500 players. What can you recommend me ? Thanks !
-
I've heard that files were gave away for free, I didn't managed to get/found them. If anyone has the files please send me a private message or post a download link here. Thank you very much, -Junkee
-
Is the the old L2Max ? I've played there few years ago, on C4 chronicle.
-
LOL, they really use retail PTS files same as RPG-CLUB :D cool, maybe I'm gonna try this server xD
-
Yeah, I'm gonna try, I can't even acces their webpage.
-
How is this possible? How did they got the files? :D
-
Wtf?russians made public gracia final OFF files?