Hello everyone,
I’m looking for a graphic designer to design a custom logo that will be used in NPC HTML interfaces for Lineage.
Please send me a private message if you are interested.
Responsibilities
• Working with the Lineage 2 server datapack
• Editing and maintaining:
• NPCs, mobs, raids, minions
• Skills, items, multisell, buylists
• Quests (XML + HTML)
• Spawn lists, territories, siege data
• Balancing:
• EXP / SP / Drop / Spoil
• Economy, shops, crafting
• PvE progression without PvP bias
• Testing changes:
• clean characters + GM testing
• server restarts
• log analysis
Required Skills
• Excellent knowledge of the Lineage 2 datapack structure
• Confident work with XML / CSV / TXT
• Understanding of Interlude mechanics:
• aggro, AI, land-rate
• champion / raid mechanics
• Understanding of interdependencies:
• item ↔ skill ↔ NPC ↔ quest
• Careful handling of IDs (without breaking compatibility)
Would Be a Big Plus
• Experience with L2J forks
• Understanding of the Java side of the server (datapack ↔ code integration level)
• Experience with custom systems:
• dynamic rates
• stage-based progression
• seasonal / PvE events
• Ability to balance using tables and formulas rather than “by feel”
We Are Not Looking for Someone Who
• Copies datapacks from other servers
• Changes IDs without understanding the consequences
• Creates multisells with infinite profit
• Does not test changes after a restart
• Balances “by intuition”
Question
Who
this is the code
i need help to adapt this for l2joff interlude
anyone help me?
Index: /java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java =================================================================== --- /java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (revision 2797) +++ /java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (working copy) @@ -27,6 +27,7 @@ import net.sf.l2j.gameserver.model.L2CharPosition; import net.sf.l2j.gameserver.model.L2Object; import net.sf.l2j.gameserver.model.L2World; +import net.sf.l2j.gameserver.model.actor.instance.L2ClassMasterInstance; import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.entity.L2Event; @@ -116,7 +117,7 @@ L2Object object = L2World.getInstance().findObject(Integer.parseInt(id)); if (_command.substring(endOfId+1).startsWith("event_participate")) L2Event.inscribePlayer(activeChar); - else if (object instanceof L2NpcInstance && endOfId > 0 && activeChar.isInsideRadius(object, L2NpcInstance.INTERACTION_DISTANCE, false, false)) + else if ((Config.ALLOW_CLASS_MASTERS && object instanceof L2ClassMasterInstance) || (object instanceof L2NpcInstance && endOfId > 0 && activeChar.isInsideRadius(object, L2NpcInstance.INTERACTION_DISTANCE, false, false))) { ((L2NpcInstance)object).onBypassFeedback(activeChar, _command.substring(endOfId+1)); } Index: /java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java =================================================================== --- /java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (revision 2797) +++ /java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (working copy) @@ -46,7 +46,10 @@ import net.sf.l2j.gameserver.model.L2Clan; import net.sf.l2j.gameserver.model.L2Effect; import net.sf.l2j.gameserver.model.L2World; +import net.sf.l2j.gameserver.model.actor.instance.L2ClassMasterInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; +import net.sf.l2j.gameserver.model.base.ClassLevel; +import net.sf.l2j.gameserver.model.base.PlayerClass; import net.sf.l2j.gameserver.model.entity.ClanHall; import net.sf.l2j.gameserver.model.entity.Couple; import net.sf.l2j.gameserver.model.entity.Fort; @@ -340,6 +343,23 @@ activeChar.onPlayerEnter(); sendPacket(new SkillCoolTime(activeChar)); + + if(Config.ALLOW_CLASS_MASTERS) + { + ClassLevel lvlnow = PlayerClass.values()[activeChar.getClassId().getId()].getLevel(); + if(activeChar.getLevel() >= 20 && lvlnow == ClassLevel.First) + { + L2ClassMasterInstance.ClassMaster.onAction(activeChar); + } + else if(activeChar.getLevel() >= 40 && lvlnow == ClassLevel.Second) + { + L2ClassMasterInstance.ClassMaster.onAction(activeChar); + } + else if(activeChar.getLevel() >= 76 && lvlnow == ClassLevel.Third) + { + L2ClassMasterInstance.ClassMaster.onAction(activeChar); + } + } if (Olympiad.getInstance().playerInStadia(activeChar)) { Index: /java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java =================================================================== --- /java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java (revision 2797) +++ /java/net/sf/l2j/gameserver/model/actor/instance/L2ClassMasterInstance.java (working copy) @@ -16,18 +16,17 @@ import javolution.text.TextBuilder; import net.sf.l2j.Config; -import net.sf.l2j.gameserver.ai.CtrlIntention; import net.sf.l2j.gameserver.datatables.CharTemplateTable; +import net.sf.l2j.gameserver.datatables.NpcTable; +import net.sf.l2j.gameserver.model.L2World; import net.sf.l2j.gameserver.model.base.ClassId; import net.sf.l2j.gameserver.model.base.ClassLevel; import net.sf.l2j.gameserver.model.base.PlayerClass; import net.sf.l2j.gameserver.model.quest.Quest; import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.network.serverpackets.ActionFailed; -import net.sf.l2j.gameserver.network.serverpackets.MyTargetSelected; import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage; import net.sf.l2j.gameserver.network.serverpackets.SystemMessage; -import net.sf.l2j.gameserver.network.serverpackets.ValidateLocation; import net.sf.l2j.gameserver.templates.chars.L2NpcTemplate; /** @@ -40,6 +39,12 @@ //private static Logger _log = Logger.getLogger(L2ClassMasterInstance.class.getName()); private static final int[] SECONDN_CLASS_IDS = {2,3,5,6,9,8,12,13,14,16,17,20,21,23,24,27, 28,30,33,34,36,37,40,41,43,46,48,51,52,55,57}; + + public static L2ClassMasterInstance ClassMaster = new L2ClassMasterInstance(31228, NpcTable.getInstance().getTemplate(31228)); + static + { + L2World.getInstance().storeObject(ClassMaster); + } /** * @param template @@ -52,109 +57,90 @@ @Override public void onAction(L2PcInstance player) { - if (!canTarget(player)) return; + if (Config.DEBUG) + _log.fine("ClassMaster activated"); - // Check if the L2PcInstance already target the L2NpcInstance - if (getObjectId() != player.getTargetId()) - { - // Set the target of the L2PcInstance player - player.setTarget(this); + ClassId classId = player.getClassId(); - // Send a Server->Client packet MyTargetSelected to the L2PcInstance player - player.sendPacket(new MyTargetSelected(getObjectId(), 0)); - - // Send a Server->Client packet ValidateLocation to correct the L2NpcInstance position and heading on the client - player.sendPacket(new ValidateLocation(this)); + int jobLevel = 0; + int level = player.getLevel(); + ClassLevel lvl = PlayerClass.values()[classId.getId()].getLevel(); + switch (lvl) + { + case First: + jobLevel = 1; + break; + case Second: + jobLevel = 2; + break; + case Third: + jobLevel = 3; + break; + default: + jobLevel = 4; } - else + + if (!Config.ALLOW_CLASS_MASTERS) + jobLevel = 3; + + if(player.isGM()) { - if (!canInteract(player)) + showChatWindowChooseClass(player); + } + else if (((level >= 20 && jobLevel == 1 ) || + (level >= 40 && jobLevel == 2 )) && Config.ALLOW_CLASS_MASTERS) + { + showChatWindow(player, classId.getId()); + } + else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && classId.getId() < 88) + { + for (int i = 0; i < SECONDN_CLASS_IDS.length; i++) { - player.getAI().setIntention(CtrlIntention.AI_INTENTION_INTERACT, this); - return; + if (classId.getId() == SECONDN_CLASS_IDS) + { + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); + TextBuilder sb = new TextBuilder(); + sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br><font color=AAAAAA>Please choose from the list of classes below...</font><br><br>"); + sb.append("<a action=\"bypass -h npc_"+getObjectId()+"_change_class "+(88+i)+"\">Advance to "+CharTemplateTable.getInstance().getClassNameById(88+i)+"</a><br>"); + sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>"); + html.setHtml(sb.toString()); + player.sendPacket(html); + break; + } } - if (Config.DEBUG) - _log.fine("ClassMaster activated"); - - ClassId classId = player.getClassId(); - - int jobLevel = 0; - int level = player.getLevel(); - ClassLevel lvl = PlayerClass.values()[classId.getId()].getLevel(); - switch (lvl) + } + else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && ((classId.getId() >= 123 && classId.getId() < 131 ) || classId.getId() == 135)) // this is for Kamael Race 3rd Transfer + { + showChatWindow(player, classId.getId()); + } + else + { + NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); + TextBuilder sb = new TextBuilder(); + sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>"); + switch (jobLevel) { - case First: - jobLevel = 1; + case 1: + sb.append("Come back here when you reach level 20 to change your class.<br>"); break; - case Second: - jobLevel = 2; + case 2: + sb.append("Come back here when you reach level 40 to change your class.<br>"); break; - default: - jobLevel = 3; + case 3: + sb.append("Come back here when you reach level 76 to change your class.<br>"); + break; + case 4: + sb.append("There are no more class changes for you.<br>"); + break; } - if (!Config.ALLOW_CLASS_MASTERS) - jobLevel = 3; + for (Quest q : Quest.findAllEvents()) + sb.append("Event: <a action=\"bypass -h Quest "+q.getName()+"\">"+q.getDescr()+"</a><br>"); - if(player.isGM()) - { - showChatWindowChooseClass(player); - } - else if (((level >= 20 && jobLevel == 1 ) || - (level >= 40 && jobLevel == 2 )) && Config.ALLOW_CLASS_MASTERS) - { - showChatWindow(player, classId.getId()); - } - else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && classId.getId() < 88) - { - for (int i = 0; i < SECONDN_CLASS_IDS.length; i++) - { - if (classId.getId() == SECONDN_CLASS_IDS) - { - NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); - TextBuilder sb = new TextBuilder(); - sb.append("<html><body<table width=200>"); - sb.append("<tr><td><center>"+CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId())+" Class Master:</center></td></tr>"); - sb.append("<tr><td><br></td></tr>"); - sb.append("<tr><td><a action=\"bypass -h npc_"+getObjectId()+"_change_class "+(88+i)+"\">Advance to "+CharTemplateTable.getInstance().getClassNameById(88+i)+"</a></td></tr>"); - sb.append("<tr><td><br></td></tr>"); - sb.append("</table></body></html>"); - html.setHtml(sb.toString()); - player.sendPacket(html); - break; - } - } - } - else if (level >= 76 && Config.ALLOW_CLASS_MASTERS && ((classId.getId() >= 123 && classId.getId() < 131 ) || classId.getId() == 135)) // this is for Kamael Race 3rd Transfer - { - showChatWindow(player, classId.getId()); - } - else - { - NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); - TextBuilder sb = new TextBuilder(); - sb.append("<html><body>"); - switch (jobLevel) - { - case 1: - sb.append("Come back here when you reach level 20 to change your class.<br>"); - break; - case 2: - sb.append("Come back here when you reach level 40 to change your class.<br>"); - break; - case 3: - sb.append("There are no more class changes for you.<br>"); - break; - } - - for (Quest q : Quest.findAllEvents()) - sb.append("Event: <a action=\"bypass -h Quest "+q.getName()+"\">"+q.getDescr()+"</a><br>"); - - sb.append("</body></html>"); - html.setHtml(sb.toString()); - player.sendPacket(html); - } + sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>"); + html.setHtml(sb.toString()); + player.sendPacket(html); } player.sendPacket(ActionFailed.STATIC_PACKET); } @@ -219,9 +205,9 @@ NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); TextBuilder sb = new TextBuilder(); - sb.append("<html><body>"); + sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>"); sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId()) + "</font>."); - sb.append("</body></html>"); + sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>"); html.setHtml(sb.toString()); player.sendPacket(html); @@ -280,9 +266,9 @@ NpcHtmlMessage html = new NpcHtmlMessage(getObjectId()); TextBuilder sb = new TextBuilder(); - sb.append("<html><body>"); + sb.append("<html><title>Class Change</title><body><center><img src=L2Font-e.replay_logo-e width=258 height=60><br><br><br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><br>"); sb.append("You have now become a <font color=\"LEVEL\">" + CharTemplateTable.getInstance().getClassNameById(player.getClassId().getId()) + "</font>."); - sb.append("</body></html>"); + sb.append("<br><img src=L2UI_CH3.herotower_deco width=256 height=32><br><font color=808080>kthxbai</font></center></body></html>"); html.setHtml(sb.toString()); player.sendPacket(html); Index: /java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java =================================================================== --- /java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java (revision 2797) +++ /java/net/sf/l2j/gameserver/model/actor/stat/PcStat.java (working copy) @@ -16,9 +16,12 @@ import net.sf.l2j.Config; import net.sf.l2j.gameserver.model.L2Character; +import net.sf.l2j.gameserver.model.actor.instance.L2ClassMasterInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance; import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance; +import net.sf.l2j.gameserver.model.base.ClassLevel; import net.sf.l2j.gameserver.model.base.Experience; +import net.sf.l2j.gameserver.model.base.PlayerClass; import net.sf.l2j.gameserver.model.quest.QuestState; import net.sf.l2j.gameserver.network.SystemMessageId; import net.sf.l2j.gameserver.network.serverpackets.PledgeShowMemberListUpdate; @@ -152,6 +155,24 @@ if (getLevel() + value > Experience.MAX_LEVEL - 1) return false; boolean levelIncreased = super.addLevel(value); + + + if(Config.ALLOW_CLASS_MASTERS) + { + ClassLevel lvlnow = PlayerClass.values()[getActiveChar().getClassId().getId()].getLevel(); + if(getLevel() >= 20 && lvlnow == ClassLevel.First) + { + L2ClassMasterInstance.ClassMaster.onAction(getActiveChar()); + } + else if(getLevel() >= 40 && lvlnow == ClassLevel.Second) + { + L2ClassMasterInstance.ClassMaster.onAction(getActiveChar()); + } + else if(getLevel() >= 76 && lvlnow == ClassLevel.Third) + { + L2ClassMasterInstance.ClassMaster.onAction(getActiveChar()); + } + } if (levelIncreased) {7 answers to this question
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now