Jump to content

Recommended Posts

Posted

Since i started to practice with XML parsing heres my 1st try its tested and working fine on Gracia CT2.4.

 

### Eclipse Workspace Patch 1.0
#P L2J-DataPack
Index: data/CustomColor.xml
===================================================================
--- data/CustomColor.xml	(revision 0)
+++ data/CustomColor.xml	(revision 0)
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<list>
+	<PvPColorList pvpCount = "1" pvpColorId = "FFFFFF" />
+	<PvPColorList pvpCount = "1000" pvpColorId = "FF9933" />
+	<PkColorList pkCount = "1" pkColorId = "FFFF77" />
+	<PkColorList pkCount = "1000" pkColorId = "FF9933" />
+</list>
\ No newline at end of file
#P L2J-GameServer
Index: java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java
===================================================================
--- java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java	(revision 228)
+++ java/com/l2jserver/gameserver/network/clientpackets/EnterWorld.java	(working copy)
@@ -26,6 +26,7 @@
import com.l2jserver.gameserver.communitybbs.Manager.RegionBBSManager;
import com.l2jserver.gameserver.datatables.AdminCommandAccessRights;
import com.l2jserver.gameserver.datatables.CharSchemesTable;
+import com.l2jserver.gameserver.datatables.CustomColorTable;
import com.l2jserver.gameserver.datatables.CustomSkillTable;
import com.l2jserver.gameserver.datatables.GMSkillTable;
import com.l2jserver.gameserver.datatables.GmListTable;
@@ -190,16 +191,17 @@
				GMSkillTable.getInstance().addSkills(activeChar);
		}

-		/*if(activeChar.getPvpKills() > 0) 
+		if (activeChar.getPvpKills() > 0)
		{
-			int nameColor = Integer.decode("0x" + ColorNameManager.getInstance().getColor(activeChar.getPvpKills(), true));
-			activeChar.getAppearance().setNameColor(nameColor);
+			int pvpColor = Integer.decode("0x" + CustomColorTable.getCustomPvpColor(activeChar.getPvpKills()));
+			activeChar.getAppearance().setNameColor(pvpColor);
		}
-		if(activeChar.getPkKills() > 0) 
+		
+		if (activeChar.getPkKills() > 0)
		{
-			int nameColor = Integer.decode("0x" + ColorNameManager.getInstance().getColor(activeChar.getPkKills(), false));
-			activeChar.getAppearance().setTitleColor(nameColor);
-		}*/
+			int pkColor = Integer.decode("0x" + CustomColorTable.getCustomPvpColor(activeChar.getPkKills()));
+			activeChar.getAppearance().setTitleColor(pkColor);
+		}

		if (Config.CUSTOM_SKILL_TABLE_ENABLED)
			if (activeChar.getPvpKills() >= Config.PVP_SKILL_REWARD)
Index: java/com/l2jserver/gameserver/datatables/CustomColorTable.java
===================================================================
--- java/com/l2jserver/gameserver/datatables/CustomColorTable.java	(revision 0)
+++ java/com/l2jserver/gameserver/datatables/CustomColorTable.java	(revision 0)
@@ -0,0 +1,172 @@
+/*
+ * 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 com.l2jserver.gameserver.datatables;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Set;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import javolution.util.FastMap;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+
+import com.l2jserver.Config;
+
+/**
+ * @author Intrepid
+ *
+ */
+public class CustomColorTable
+{
+	private static final Logger _log = Logger.getLogger(CustomColorTable.class.getName());
+	private static FastMap<Integer, String> _pvpcolors;
+	private static FastMap<Integer, String> _pkcolors;
+	
+	/**
+	 * 
+	 * @return or initialize new instance
+	 */
+	public static CustomColorTable getInstance()
+	{
+		return SingletonHolder._instance;
+	}
+	
+	/**
+	 * Read XML data from CustomColor.xml
+	 */
+	private CustomColorTable()
+	{
+		_pvpcolors = new FastMap<Integer, String>();
+		_pkcolors = new FastMap<Integer, String>();
+		
+		File colorFile = new File(Config.DATAPACK_ROOT, "data/CustomColor.xml");
+		Document doc = null;
+		try
+		{
+			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
+			dbf.setIgnoringComments(true);
+			dbf.setValidating(false);
+			DocumentBuilder db = dbf.newDocumentBuilder();
+			doc = db.parse(colorFile);
+			
+			for (Node root = doc.getFirstChild(); root != null; root = root.getNextSibling())
+			{
+				if ("list".equalsIgnoreCase(root.getNodeName()))
+				{
+					for (Node child = root.getFirstChild(); child != null; child = child.getNextSibling())
+					{
+						if ("PvPColorList".equalsIgnoreCase(child.getNodeName()))
+						{
+							int pvpCount;
+							String pvpcolorId;
+							Node attr;
+							NamedNodeMap attrs = child.getAttributes();
+							
+							attr = attrs.getNamedItem("pvpCount");
+							if (attr == null)
+							{
+								_log.warning("CustomColorTable: missing pvpCount!");
+								continue;
+							}
+							pvpCount = Integer.parseInt(attr.getNodeValue());
+							
+							pvpcolorId = attrs.getNamedItem("pvpColorId").getNodeValue();
+							
+							_pvpcolors.put(pvpCount, pvpcolorId);
+							_log.info("Loaded: " + _pvpcolors.size() + " pvp color ");
+						}
+						if ("PkColorList".equalsIgnoreCase(child.getNodeName()))
+						{
+							int pkCount;
+							String pkcolorId;
+							Node attr;
+							NamedNodeMap attrs = child.getAttributes();
+							
+							attr = attrs.getNamedItem("pkCount");
+							if (attr == null)
+							{
+								_log.warning("CustomColorTable: missing pkCount!");
+								continue;
+							}
+							pkCount = Integer.parseInt(attr.getNodeValue());
+							
+							pkcolorId = attrs.getNamedItem("pkColorId").getNodeValue();
+							
+							_pkcolors.put(pkCount, pkcolorId);
+							_log.info("Loaded: " + _pkcolors.size() + " pk color ");
+						}
+					}
+				}
+			}
+		}
+		catch(IOException ioe)
+		{
+			_log.log(Level.WARNING,"Cannot find the file: " + colorFile + "on place:" + colorFile.getAbsolutePath(), ioe);
+		}
+		catch (Exception e)
+		{
+			_log.log(Level.WARNING,"Error occured while parsing: " + colorFile, e);
+		}
+	}
+	
+	/**
+	 * 
+	 * @param pvpColor
+	 * @return
+	 */
+	public static String getCustomPvpColor(int pvpkill)
+	{
+		return _pvpcolors.get(getValueBefore(pvpkill, _pvpcolors.keySet()));
+	}
+	
+	/**
+	 * 
+	 * @param pkColor
+	 * @return
+	 */
+	public static String getCustomPkColor(int pkkill)
+	{
+		return _pkcolors.get(getValueBefore(pkkill, _pkcolors.keySet()));
+	}
+	
+	/**
+	 * Will return the value just before the given value contained
+	 * in the provided Set of integers
+	 * @param value
+	 * @param set
+	 * @return the value just before the provided one
+	 */
+	private static int getValueBefore(int value, Set<Integer> set)
+	{
+		int counter = 0;
+		for(int i : set)
+			if(i > counter && value > i)
+				counter = i;
+		return counter;
+	}
+	
+	@SuppressWarnings("synthetic-access")
+	private static class SingletonHolder
+	{
+		protected static final CustomColorTable _instance = new CustomColorTable();
+	}
+}
Index: java/com/l2jserver/gameserver/GameServer.java
===================================================================
--- java/com/l2jserver/gameserver/GameServer.java	(revision 228)
+++ java/com/l2jserver/gameserver/GameServer.java	(working copy)
@@ -45,6 +45,7 @@
import com.l2jserver.gameserver.datatables.CharSchemesTable;
import com.l2jserver.gameserver.datatables.CharTemplateTable;
import com.l2jserver.gameserver.datatables.ClanTable;
+import com.l2jserver.gameserver.datatables.CustomColorTable;
import com.l2jserver.gameserver.datatables.CustomSkillTable;
import com.l2jserver.gameserver.datatables.DoorTable;
import com.l2jserver.gameserver.datatables.EnchantGroupsTable;
@@ -430,6 +431,7 @@
		}
		if (Config.CUSTOM_SKILL_TABLE_ENABLED)
			CustomSkillTable.getInstance();
+		CustomColorTable.getInstance();
		HideAndSeekDataParser.getData();
		if ((Config.OFFLINE_TRADE_ENABLE || Config.OFFLINE_CRAFT_ENABLE) && Config.RESTORE_OFFLINERS)
			OfflineTradersTable.restoreOfflineTraders();

 

In the XML file 1 is necessary to use! Color updated on enterworld.

 

Credits to me(and B1ggBoss's share for the getValueBefore method)

  • 4 months later...

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
Reply to this topic...

×   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...

AdBlock Extension Detected!

Our website is made possible by displaying online advertisements to our members.

Please disable AdBlock browser extension first, to be able to use our community.

I've Disabled AdBlock