Is there any way to fix the Diablo II account names when you are logged into Battle.net through a Diablo II bot?  Currently what it is doing is showing their accounts in the channel as:  [D2CharName]@[Realm]*[AcctName].  However, the bot is apparently setup for only *[AcctName], because anytime someone does .help or any other command it says that user is not logged in.  SO, is there any way to fix this?
			
			
			
				Parse it yourself. :)
			
			
			
				Well, if anyone cares, I made a workaround for this bug.  Simply, what this does is filters out any Character Name and Realm combination on any outgoing messages, so it leaves just the account name.  I.E -- It makes the bot able to whisper people, but doesn't actually change it in the channel listing or anything.  I am looking into a permanent fix such that it will display correctly in the channel listing as well.  If anyone has any information to point me in the right direction, let me know :P.
Anyways, here is the code I have so far:
import java.io.IOException;
import java.util.Properties;
import javax.swing.JComponent;
import callback_interfaces.PluginCallbackRegister;
import callback_interfaces.PublicExposedFunctions;
import callback_interfaces.StaticExposedFunctions;
import plugin_interfaces.GenericPluginInterface;
import plugin_interfaces.OutgoingTextCallback;
/**
 * @author Hellmonkeys
 *
 */
public class PluginMain extends GenericPluginInterface implements OutgoingTextCallback 
{
    private PublicExposedFunctions out;
    
    public void load(StaticExposedFunctions staticFuncs)
    {
    }
    public void activate(PublicExposedFunctions out, PluginCallbackRegister register)
    {
        this.out = out;
        register.registerOutgoingTextPlugin(this, null);
    }
    public void deactivate(PluginCallbackRegister register)
    {
    }
    public String getName()
    {
        return "D2 Account Fix";
    }
    public String getVersion()
    {
        return "v1.0";
    }
    public String getAuthorName()
    {
        return "Hellmonkeys";
    }
    public String getAuthorWebsite()
    {
        return "www.google.com";
    }
    public String getAuthorEmail()
    {
        return "Hellmonkeys@GMail.com";
    }
    public String getShortDescription()
    {
        return "Fixes D2 Account Names";
    }
    public String getLongDescription()
    {
        return "Fixes the account names in Diablo II to allow whispers, etc.";
    }
    public Properties getSettingsDescription()
    {
        return new Properties();
    }
    public Properties getDefaultSettingValues()
    {
        return new Properties();
    }
	public JComponent getComponent(String settingName, String value)
	{
		return null;
	}
    
    
    public Properties getGlobalDefaultSettingValues()
    {
        Properties p = new Properties();
        return p;
    }
    public Properties getGlobalSettingsDescription()
    {
        Properties p = new Properties();
        return p;
    }
    public JComponent getGlobalComponent(String settingName, String value)
    {
        return null;
    }
    
    public String queuingText(String text, Object data)
    {
    	String find[] = {"@USEast*","@USWest*","@Europe*"};
    	
    	int loop = 0;
    	String finalText = text;
    	
    	while(loop < find.length)
    	{
	    	int index;
	    	index = (finalText.toLowerCase()).indexOf(find[loop].toLowerCase());
	    	
	    	while(index > -1)
	    	{
	    		int space = finalText.lastIndexOf(' ', index);
	    		if(space > -1)
	    		{
	    			finalText = finalText.substring(0,space + 1) + finalText.substring(index + find[loop].length() - 1);		    		
			    	index = finalText.indexOf(find[loop]);
	    		}
	    		else
	    		{
	    			index = -1;	    			
	    		}
	    	}
	        
	        loop = loop + 1;
    	}
    	
        return finalText;
    }
    public void queuedText(String text, Object data)
    {
    }
    public String nextInLine(String text, Object data)
    {
        return text;
    }
    
    public long getDelay(String text, Object data)
    {
        return 0;
    }
    public boolean sendingText(String text, Object data)
    {
        return true;
    }
    public void sentText(String text, Object data)
    {
    }
}
P.S -- Yes, I know, this is quite a shitty method of fixing this problem, however, it is a start and is simply a workaround, not a fix.
			
			
			
				You've gotta love Diablo II's mangling. Blizzard screwed that up majorly. ^_^
			
			
			
				Well, since you can log on D2 acc multiple times, I guess it is reasonable to identify them in specific way. Too bad it causes problems with JO though. I look forward to that fix too. Surely it'd simplify some matters.
			
			
			
				Below is quite a bit better fix.  I think this should be implemented in JavaOp itself.  Granted, it's a bit of an overkill to do this to all events, but whatever...  I don't feel like spending the time to find what's necessary.  Also, JavaOp has * as a wildcard for user names, which will really mess this thing up, so pretty soon I am going to change this to not include the *, but add it in for any outgoing whispers... won't be hard.
But yeah, I am sure doing this to all packets may mess some things up, but so far my bot has been running fine with it for a day+.
import java.io.IOException;
import java.util.Properties;
import javax.swing.JComponent;
import callback_interfaces.PluginCallbackRegister;
import callback_interfaces.PublicExposedFunctions;
import callback_interfaces.StaticExposedFunctions;
import exceptions.PluginException;
import plugin_interfaces.GenericPluginInterface;
import plugin_interfaces.RawEventCallback;
import util.BNetEvent;
/**
 * @author Hellmonkeys
 *
 */
public class PluginMain extends GenericPluginInterface implements RawEventCallback 
{
    private PublicExposedFunctions out;
    
    public void load(StaticExposedFunctions staticFuncs)
    {
    }
    public void activate(PublicExposedFunctions out, PluginCallbackRegister register)
    {
        this.out = out;
        
        register.registerRawEventPlugin(this, EID_SHOWUSER, 			null);
        register.registerRawEventPlugin(this, EID_JOIN, 				null);
        register.registerRawEventPlugin(this, EID_LEAVE, 				null);
        register.registerRawEventPlugin(this, EID_WHISPER, 				null);
        register.registerRawEventPlugin(this, EID_TALK, 				null);
        register.registerRawEventPlugin(this, EID_BROADCAST, 			null);
        register.registerRawEventPlugin(this, EID_CHANNEL, 				null);
        register.registerRawEventPlugin(this, EID_USERFLAGS, 			null);
        register.registerRawEventPlugin(this, EID_WHISPERSENT, 			null);
        register.registerRawEventPlugin(this, EID_CHANNELFULL, 			null);
        register.registerRawEventPlugin(this, EID_CHANNELDOESNOTEXIST, 	null);
        register.registerRawEventPlugin(this, EID_INFO, 				null);
        register.registerRawEventPlugin(this, EID_ERROR, 				null);
        register.registerRawEventPlugin(this, EID_EMOTE, 				null);
    }
    public void deactivate(PluginCallbackRegister register)
    {
    }
    public String getName()
    {
        return "D2 Account Fix";
    }
    public String getVersion()
    {
        return "v1.0";
    }
    public String getAuthorName()
    {
        return "Hellmonkeys";
    }
    public String getAuthorWebsite()
    {
        return "www.google.com";
    }
    public String getAuthorEmail()
    {
        return "Hellmonkeys@GMail.com";
    }
    public String getShortDescription()
    {
        return "Fixes D2 Account Names";
    }
    public String getLongDescription()
    {
        return "Fixes the account names in Diablo II to allow whispers, etc.";
    }
    public Properties getSettingsDescription()
    {
        return new Properties();
    }
    public Properties getDefaultSettingValues()
    {
        return new Properties();
    }
	public JComponent getComponent(String settingName, String value)
	{
		return null;
	}
	
    public Properties getGlobalDefaultSettingValues()
    {
        Properties p = new Properties();
        return p;
    }
    public Properties getGlobalSettingsDescription()
    {
        Properties p = new Properties();
        return p;
    }
    public JComponent getGlobalComponent(String settingName, String value)
    {
        return null;
    }
    
    public BNetEvent eventOccurring(BNetEvent event, Object data) throws IOException, PluginException
    {
        String username = stripAccount(event.getUsername());
        
        return new BNetEvent(event.getCode(), username, event.getMessage(), event.getPing(), event.getFlags());
    }
    
    public void eventOccurred(BNetEvent event, Object data) throws IOException, PluginException
    {
    }
    private String stripAccount(String user)
    {
    	String account = user;
    	int index = user.indexOf('*');
    	
    	if(index > -1)
    		account = user.substring(index);
    	
    	return account;
    }
}
			
			
			
				Feel free to build it into a JAR and attach it (if you can -- if you're not allowed to, get a hold of me). I'm not really interested in maintaining anything JavaOp-related right now.