Jump to content
  • 0

I Need Help To Fix This Java Code. L2Jserver Hi5 Stable(Trunk).


Question

Posted (edited)

I have this community board class master code, I tried to adapt it to my L2j Server and for some reason it doesn't work. I tried many different things to fix it and make it work but nothing. I got it to show the html on the community board but all it does is tell players that their class and witch level they can change classes. It is supposed to show buttons with the class available to then  when they reach the proper level to change class.

Can anyone take a look on it and see if you can help me fix it. I appreciate if anyone help.

Thank you.

 

Obs: No errors on Eclipse.

/*
 * 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://l2jpsproject.eu/>.
 */
package com.l2jserver.gameserver.communitybbs.Managers;

import java.util.StringTokenizer;

import javolution.text.TextBuilder;

import com.l2jserver.Config;
import com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.base.ClassId;
import com.l2jserver.gameserver.model.items.L2Item;
import com.l2jserver.gameserver.model.items.instance.L2ItemInstance;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.util.Util;

public class ClassBBSManager extends BaseBBSManager
{
    private static ClassBBSManager _Instance = null;
    
    public static ClassBBSManager getInstance()
    {
        if (_Instance == null)
        {
            _Instance = new ClassBBSManager();
        }
        return _Instance;
    }
    
    @Override
    public void parsecmd(String command, L2PcInstance activeChar)
    {
        ClassId classId = activeChar.getClassId();
        int jobLevel = classId.level();
        int level = activeChar.getLevel();
        TextBuilder html = new TextBuilder("");
        html.append("<br>");
        html.append("<center>");
        if (Config.ALLOW_CLASS_MASTERS_LISTCB.isEmpty() || !Config.ALLOW_CLASS_MASTERS_LISTCB.contains(jobLevel))
        {
            jobLevel = 3;
        }
        if ((((level >= 20) && (jobLevel == 0)) || ((level >= 40) && (jobLevel == 1)) || ((level >= 76) && (jobLevel == 2))) && Config.ALLOW_CLASS_MASTERS_LISTCB.contains(jobLevel))
        {
            L2Item item = ItemTable.getInstance().getTemplate(Config.CLASS_MASTERS_PRICE_ITEMCB);
            html.append("Price for class is: <font color=\"LEVEL\">");
            html.append(Util.formatAdena(Config.CLASS_MASTERS_PRICE_LISTCB[jobLevel])).append("</font> <font color=\"LEVEL\">").append(item.getName()).append("</font> Really want one click class?<br>");
            for (ClassId cid : ClassId.values())
            {
                if (cid == ClassId.inspector)
                {
                    continue;
                }
                if (cid.childOf(classId) && (cid.level() == (classId.level() + 1)))
                {
                    html.append("<br><center><button value=\"").append(cid.name()).append("\" action=\"bypass -h _bbsclass;change_class;").append(cid.getId()).append(";").append(Config.CLASS_MASTERS_PRICE_LISTCB[jobLevel]).append("\" width=250 height=25 back=\"L2UI_CT1.Button_DF_Down\" fore=\"L2UI_CT1.Button_DF\"></center>");
                }
            }
            html.append("</center>");
        }
        else
        {
            switch (jobLevel)
            {
                case 0:
                    html.append("Greetings " + activeChar.getName() + "! Your current class is <font color=F2C202>" + activeChar.getClassId().name() + "</font>.<br>");
                    html.append("Class level at: <font color=F2C202>20 level.</font><br>");
                    html.append("Class level at: <font color=F2C202>40 level.</font><br>");
                    html.append("Class level at:  <font color=F2C202>76 level.</font><br>");
                    break;
                case 1:
                    html.append("Congratulation " + activeChar.getName() + "! you are <font color=F2C202>" + activeChar.getClassId().name() + "</font>now.<br>");
                    break;
                case 2:
                    html.append("Greetings " + activeChar.getName() + "! Your current class is <font color=F2C202>" + activeChar.getClassId().name() + "</font>.<br>");
                    html.append("Class level at: <font color=F2C202>20 level.</font><br>");
                    html.append("Class level at:<font color=F2C202>40 level.</font><br>");
                    html.append("Class level at: <font color=F2C202>76 level.</font><br>");
                    break;
                case 3:
                    html.append("Greetings " + activeChar.getName() + "! Your current class is <font color=F2C202>" + activeChar.getClassId().name() + "</font>.<br>");
                    html.append("Congratulation !.<br>");
                    if (level >= 76)
                    {
                        html.append("Your level is over <font color=F2C202>76</font>! There is no more classes available to you.<br>");
                    }
                    break;
            }
        }
        NpcHtmlMessage adminReply = new NpcHtmlMessage(5);
        adminReply.setFile(activeChar.getLang(), "data/html/CommunityBoard/5.htm");
        adminReply.replace("%classmaster%", html.toString());
        separateAndSend(adminReply.getHtm(), activeChar);
        
        if (command.startsWith("_bbsclass;change_class;"))
        {
            StringTokenizer st = new StringTokenizer(command, ";");
            st.nextToken();
            st.nextToken();
            short val = Short.parseShort(st.nextToken());
            int price = Integer.parseInt(st.nextToken());
            L2Item item = ItemTable.getInstance().getTemplate(Config.CLASS_MASTERS_PRICE_ITEMCB);
            L2ItemInstance pay = activeChar.getInventory().getItemByItemId(item.getItemId());
            if ((pay != null) && (pay.getCount() >= price))
            {
                activeChar.destroyItem("ClassMaster", pay, price, activeChar, true);
                changeClass(activeChar, val);
                parsecmd("_bbsclass;", activeChar);
            }
            else if (Config.CLASS_MASTERS_PRICE_ITEMCB == 57)
            {
                activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA));
            }
            else
            {
                activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_NOT_ENOUGH_ADENA));
            }
        }
    }
    
    private void changeClass(L2PcInstance activeChar, short val)
    {
        if (activeChar.getClassId().level() == ClassId.values()[val].level())
        {
            return;
        }
        
        if (activeChar.getClassId().level() == 3)
        {
            activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.THIRD_CLASS_TRANSFER));
        }
        else
        {
            activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.CLASS_TRANSFER));
        }
        activeChar.setClassId(val);
        
        if (activeChar.getClassId().level() == 2)
        {
            activeChar.getInventory().addItem("bbsClassManager", 6622, 1L, activeChar, null);
        }
        
        if (activeChar.isSubClassActive())
        {
            activeChar.getSubClasses().get(Integer.valueOf(activeChar.getClassIndex())).setClassId(activeChar.getActiveClass());
        }
        else
        {
            if (activeChar.getClassId().level() == 0)
            {
                activeChar.getInventory().addItem("bbsClassManager", 8869, 15L, activeChar, null);
            }
            else if (activeChar.getClassId().level() == 1)
            {
                activeChar.getInventory().addItem("bbsClassManager", 8870, 15L, activeChar, null);
            }
            
            activeChar.setBaseClass(activeChar.getActiveClass());
        }
        
        if (activeChar.getClassId().getId() == 97)
        {
            activeChar.getInventory().addItem("bbsClassManager", 15307, 1L, activeChar, null);
        }
        else if (activeChar.getClassId().getId() == 105)
        {
            activeChar.getInventory().addItem("bbsClassManager", 15308, 1L, activeChar, null);
        }
        else if (activeChar.getClassId().getId() == 112)
        {
            activeChar.getInventory().addItem("bbsClassManager", 15309, 4L, activeChar, null);
        }
        
        activeChar.broadcastUserInfo();
    }
    
    @Override
    public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)
    {
    }
}

<html>
	<body><br>
			<center>
			
			<center><table>
				<tr>
					<td  width="500" align="center" border="0" cellpadding="0" cellspacing="0" ><center>%classmaster%</center></td>
				</tr>
			</table><br><br><br><br>
			
			
					
	</body>
</html>
Edited by disorder25

3 answers to this question

Recommended Posts

  • 0
Posted

Are you sure that condition is reached ?

 

ALLOW_CLASS_MASTERS_LISTCB must contain allowed classes.

if ((((level >= 20) && (jobLevel == 0)) || ((level >= 40) && (jobLevel == 1)) || ((level >= 76) && (jobLevel == 2))) && Config.ALLOW_CLASS_MASTERS_LISTCB.contains(jobLevel))
Guest
This topic is now closed to further replies.


  • Posts

    • 💎 Unlock Advanced Google Workspace AI integrations with 5TB storage for up to 18 months. Tested, verified, and automated delivery!     FINAL CALL: Google is Shutting This Down After October 2026! Google will NEVER bring back this window of opportunity again. Once this month ends, this massive backdoor upgrade is gone permanently!  BUY 2, GET 1 FREE IS STILL LIVE! Stock up now for yourself, your family, your business, and your friends! Think about it: Every single person you know uses a Gmail account, and everyone is running out of storage. Don't let your loved ones get trapped paying $20–$30 every single month when you can set them up with 5TB Cloud Storage + Gemini Advanced (12–18 Months) right now for only $15! Why Buy Bulk Activations Today? Instant Gift Value: Perfect lifetime-style gift for clients, family, or team members. 100% Private & Safe: Activates on personal Gmails—zero passwords or logins required. Global Access: Works worldwide with zero VPN hassles. Instant Automated Delivery: Receive your activation links in seconds 24/7! ‍ Time is running out fast—secure your extra free licenses before the October deadline hits! Order Your Bundle Now on the Website
    • 31 Interlude Classes Reworked - Interested in Your Opinions One of the biggest challenges while developing L2 WARFRONT has been class balance. Interlude was never designed around continuous, fully buffed faction battles where players return to combat within seconds. Mechanics that work reasonably well in traditional PvP can behave very differently when entire groups are fighting over objectives. Over the past months, we've worked on all 31 playable classes, trying to give each a meaningful battlefield role without removing what makes them recognisable as Interlude classes. Some examples of what we've been experimenting with: Tanks: Chain Strike, Frontline Bulwark and adjustments aimed at making them more valuable in frontline combat. Titan: Frenzy, Zealot and Guts dynamically scale with current HP rather than simply being locked behind an activation threshold. Daggers: Shadow Step, Hide and other changes to mobility and close-range gameplay. Healers: Adjusted healing effectiveness and an offensive Inquisitor option, with the aim of preventing organised parties from becoming almost impossible to kill. Support classes: Additional combat and party-support mechanics to encourage more class diversity. The goal is not to make every class equally strong in a 1v1. A tank, a dagger, a nuker and a healer should have very different strengths. We're not claiming we've achieved perfect balance. We completed a Closed Beta with around 110 participants, collected feedback and have continued making adjustments. We've also published a breakdown of the changes to all 31 classes: https://l2warfront.com/guides/interlude-class-balance/   I'd genuinely be interested in hearing from experienced Interlude players: Which classes do you think are most overlooked in large-scale PvP? Are there any mechanics you believe become particularly problematic in continuous faction warfare? Criticism is welcome. Even when we disagree on a particular approach, a good discussion can help us make better decisions. L2 WARFRONT — Grand Opening: 30 October 2026.
    • I love seeing so much activity on Maxcheaters—users sharing things and all that. Honestly, I want to congratulate every single member of the Maxcheaters staff.   Keep it up! 🙂
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..