Jump to content
  • 0

Help With Community Board Services


disorder25

Question

Hello I have I section on my community board that have Services, like Change Gender, Pk Cleaner, Noblesse, etc. I want to add a option to change the name. I add the code but when I enter the name on the box, instead of change the name to what I enter in the box I get the bypass as my name like:

;Name;$newName

How can I fix that?

 

Here is my code.

package com.l2jserver.gameserver.communitybbs.Managers;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.PatternSyntaxException;

import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.cache.HtmCache;
import com.l2jserver.gameserver.communitybbs.Manager.BaseBBSManager;
import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;
import com.l2jserver.gameserver.datatables.CharNameTable;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.network.SystemMessageId;
import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
import com.l2jserver.gameserver.network.serverpackets.MagicSkillUse;
import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowAll;
import com.l2jserver.gameserver.network.serverpackets.PartySmallWindowDeleteAll;
import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListAll;
import com.l2jserver.gameserver.network.serverpackets.PledgeShowMemberListUpdate;
import com.l2jserver.gameserver.network.serverpackets.ShowBoard;
import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
import com.l2jserver.gameserver.network.serverpackets.UserInfo;
import com.l2jserver.gameserver.util.Util;

public class ServiceBBSManager extends BaseBBSManager
{
	public static final Logger _log = Logger.getLogger(ServiceBBSManager.class.getName());
	
	public ServiceBBSManager()
	{
	}
	
	@Override
	public void parsecmd(String command, L2PcInstance activeChar)
	{
		if (command.equals("_bbsservice"))
		{
			sendHtm(activeChar, "data/html/CommunityBoard/42.htm");
		}
		else if (command.startsWith("_bbsservice;"))
		{
			StringTokenizer st = new StringTokenizer(command, ";");
			st.nextToken();
			String param = st.nextToken();
			if (param.equalsIgnoreCase("Noobles"))
			{
				if (activeChar.getInventory().getItemByItemId(Config.NoblItemId) == null)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
					return;
				}
				if (activeChar.getInventory().getItemByItemId(Config.NoblItemId).getCount() < Config.NoblItemCount)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
					return;
				}
				if (activeChar.getClassId().level() < 3)
				{
					activeChar.sendMessage("You must have third class.");
					return;
				}
				if (activeChar.isNoble())
				{
					activeChar.sendMessage("You already have nobless.");
					return;
				}
				activeChar.destroyItemByItemId("ShopBBS", Config.NoblItemId, Config.NoblItemCount, activeChar, true);
				activeChar.setNoble(true);
				activeChar.setTarget(activeChar);
				activeChar.broadcastPacket(new MagicSkillUse(activeChar, 5103, 1, 1000, 0));
				activeChar.broadcastUserInfo();
				activeChar.sendMessage("You are now a Noblesse Character.");
			}
			else if (param.equalsIgnoreCase("Gender"))
			{
				if (activeChar.getInventory().getItemByItemId(Config.GenderItemId) == null)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
					return;
				}
				if (activeChar.getInventory().getItemByItemId(Config.GenderItemId).getCount() < Config.GenderItemCount)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
					return;
				}
				activeChar.destroyItemByItemId("ShopBBS", Config.GenderItemId, Config.GenderItemCount, activeChar, true);
				activeChar.getAppearance().setSex(activeChar.getAppearance().getSex() ? false : true);
				activeChar.setTarget(activeChar);
				activeChar.broadcastPacket(new MagicSkillUse(activeChar, 5103, 1, 1000, 0));
				activeChar.broadcastUserInfo();
				activeChar.sendMessage("You have change your Gender successfully.");
			}
			else if (param.equalsIgnoreCase("RecoveryPK"))
			{
				if (activeChar.getInventory().getItemByItemId(Config.RecoveryPKItemId) == null)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
					return;
				}
				if (activeChar.getInventory().getItemByItemId(Config.RecoveryPKItemId).getCount() < Config.RecoveryPKItemCount)
				{
					activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.NOT_ENOUGH_ITEMS));
					return;
				}
				activeChar.destroyItemByItemId("ShopBBS", Config.RecoveryPKItemId, Config.RecoveryPKItemCount, activeChar, true);
				activeChar.setKarma(0);
				activeChar.setPkKills(0);
				activeChar.broadcastUserInfo();
				activeChar.sendPacket(new UserInfo(activeChar));
				activeChar.sendPacket(new ExBrExtraUserInfo(activeChar));
				activeChar.sendMessage("You have clean your Pks.");
				
			}
			else if (command.equalsIgnoreCase("Name"))
			{
				try
				{
					String _name = command.substring(11);
					String errorMsg = null;
					boolean proceed = true;
					if (_name.length() <= 2)
					{
						errorMsg = "Names have to be at least 3 characters";
						activeChar.sendMessage("Names have to be at least 3 characters");
						proceed = false;
					}
					if (_name.length() >= 17)
					{
						errorMsg = "Names cannot be longer than 16 characters";
						activeChar.sendMessage("Names cannot be longer than 16 characters");
						proceed = false;
					}
					if ((!Util.isAlphaNumeric(_name)) || (!isValidName(_name)))
					{
						errorMsg = "Invalid name";
						activeChar.sendMessage("Names can Only have letters and numbers");
						proceed = false;
					}
					if (CharNameTable.getInstance().getIdByName(_name) > 0)
					{
						errorMsg = "Name already exists";
						activeChar.sendMessage((new StringBuilder()).append("Warning, name ").append(_name).append(" already exists.").toString());
						proceed = false;
					}
					if (!proceed)
					{
						activeChar.sendMessage(errorMsg);
					}
					activeChar.destroyItemByItemId("ShopBBS", Config.NameItemId, Config.NameItemCount, activeChar, true);
					L2World.getInstance().removeFromAllPlayers(activeChar);
					activeChar.setName(_name);
					activeChar.store();
					L2World.getInstance().addToAllPlayers(activeChar);
					activeChar.sendMessage("Your new character name is " + _name);
					activeChar.broadcastUserInfo();
					try (Connection con = L2DatabaseFactory.getInstance().getConnection();
						PreparedStatement statement = con.prepareStatement("UPDATE characters SET char_name=? WHERE charId=?"))
					{
						statement.setString(1, _name);
						statement.setInt(2, activeChar.getObjectId());
						statement.execute();
						statement.close();
					}
					catch (Exception e)
					{
						_log.info("Error updating name for player " + activeChar.getName() + ". Error: " + e);
					}
					if (activeChar.isInParty())
					{
						// Delete party window for other party members
						activeChar.getParty().broadcastToPartyMembers(activeChar, new PartySmallWindowDeleteAll());
						for (final L2PcInstance member : activeChar.getParty().getMembers())
						{
							// And re-add
							if (member != activeChar)
							{
								member.sendPacket(new PartySmallWindowAll(activeChar, activeChar.getParty()));
							}
						}
					}
					
					if (activeChar.getClan() != null)
					{
						activeChar.getClan().updateClanMember(activeChar);
						activeChar.getClan().broadcastToOnlineMembers(new PledgeShowMemberListUpdate(activeChar));
						activeChar.sendPacket(new PledgeShowMemberListAll(activeChar.getClan(), activeChar));
					}
					
					RegionBBSManager.getInstance().changeCommunityBoard();
				}
				catch (StringIndexOutOfBoundsException e)
				{ // Case of empty character name
					activeChar.sendMessage("error: Something went wrong");
				}
			}
			else
			{
				ShowBoard sb = new ShowBoard((new StringBuilder()).append("<html><body><br><br><center>the command: ").append(command).append(" is not implemented yet</center><br><br></body></html>").toString(), "101");
				activeChar.sendPacket(sb);
				activeChar.sendPacket(new ShowBoard(null, "102"));
				activeChar.sendPacket(new ShowBoard(null, "103"));
			}
		}
	}
	
	private boolean sendHtm(L2PcInstance player, String path)
	{
		String oriPath = path;
		if ((player.getLang() != null) && !player.getLang().equalsIgnoreCase("en") && path.contains("html/"))
		{
			path = path.replace("html/", (new StringBuilder()).append("html-").append(player.getLang()).append("/").toString());
		}
		String content = HtmCache.getInstance().getHtm(path);
		if ((content == null) && !oriPath.equals(path))
		{
			content = HtmCache.getInstance().getHtm(oriPath);
		}
		if (content == null)
		{
			return false;
		}
		separateAndSend(content, player);
		return true;
	}
	
	private boolean isValidName(final String text)
	{
		boolean result = true;
		final String test = text;
		Pattern pattern;
		
		try
		{
			pattern = Pattern.compile(Config.CNAME_TEMPLATE);
		}
		catch (final PatternSyntaxException e) // case of illegal pattern
		{
			e.printStackTrace();
			pattern = Pattern.compile(".*");
		}
		
		final Matcher regexp = pattern.matcher(test);
		if (!regexp.matches())
		{
			result = false;
		}
		
		return result;
	}
	
	@Override
	public void parsewrite(String ar1, String ar2, String ar3, String ar4, String ar5, L2PcInstance activeChar)
	{
	}
	
	public static ServiceBBSManager getInstance()
	{
		return SingletonHolder._instance;
	}
	
	public static class SingletonHolder
	{
		protected static final ServiceBBSManager _instance = new ServiceBBSManager();
	}
}

and the bypass

<td align=center width=130><edit var="newName" width=100><button value="Change Name" action="bypass -h _bbsservice;Name;$newName" width=120 height=21 back="L2UI_CT1.Button_DF_Down" fore="L2UI_CT1.Button_DF"></td>
						
Edited by disorder25
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

this is because the bypass is string... so it reads 

"bypass -h _bbsservice;Name,$newName"

cant convert from $newName to the given name... if for example ur button bypass will be as :

bypass -h admin_setname $newName

will be fine... i think u can understand what i mean... $newName must be as argument and not as $newName (string)

 

Edit: 

try to change 

String _name = command.substring(11);

to (17)

Edited by melron
Link to comment
Share on other sites

  • 0

this is because the bypass is string... so it reads 

"bypass -h _bbsservice;Name,$newName"

cant convert from $newName to the given name... if for example ur button bypass will be as :

bypass -h admin_setname $newName

will be fine... i think u can understand what i mean... $newName must be as argument and not as $newName (string)

 

Edit: 

try to change 

String _name = command.substring(11);

to (17)

 

 

I think I kind of understood what you were saying.

I did the changes and now look like the code is working but I still have one problem, if I use this bypass:

bypass -h _bbsservice;Name $newName

I get this error on the community board.

the command: _bbsservice;Name Paul is not implemented yet.

If I use this bypass

bypass -h _bbsservice;Name;$newName

I get the char named $newName

 

 

 

Do I need to create a bypass on CommunityBoard.java for the command for the first bypass to work?

 

 

Thank you.

Edited by disorder25
Link to comment
Share on other sites

  • 0

nobody? ????

String _name = st.nextToken();

and change your bypass to

bypass -h _bbsservice;Name;$newName;
Link to comment
Share on other sites

  • 0
String _name = st.nextToken();

and change your bypass to

bypass -h _bbsservice;Name;$newName;

 

 

Didn't work. I made all the changes you show me but still not working. Now when I enter the name and click on the button I get the message from:

catch (StringIndexOutOfBoundsException e)
Edited by disorder25
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...