Selaa lähdekoodia

BETA: Misc reworks:
* Cleaning up old karma configuration.
* Minor rework of Class Master configuration data handling.

Rumen Nikiforov 11 vuotta sitten
vanhempi
sitoutus
ce4464ac51

+ 0 - 21
L2J_Server_BETA/dist/game/config/PVP.properties

@@ -4,27 +4,6 @@
 # The defaults are set to be retail-like. If you modify any of these settings your server will deviate from being retail-like.
 # Warning: 
 # Please take extreme caution when changing anything. Also please understand what you are changing before you do so on a live server.
-
-# ---------------------------------------------------------------------------
-# Karma Variables
-# ---------------------------------------------------------------------------
-
-# Karma gain/loss
-# Default: 240
-MinKarma = 240
-
-# Default: 10000
-MaxKarma = 10000
-
-# The number to divide the xp received by to calculate karma lost on xp gain/loss.
-# Default: 260
-XPDivider = 260
-
-# The minimum karma lost if 0 karma is to be removed.
-# Default: 0
-BaseKarmaLost = 0
-
-
 # ---------------------------------------------------------------------------
 # PK'er Drop Settings
 # ---------------------------------------------------------------------------

+ 36 - 51
L2J_Server_BETA/java/com/l2jserver/Config.java

@@ -54,6 +54,7 @@ import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 
 import com.l2jserver.gameserver.engines.DocumentParser;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.model.itemcontainer.PcInventory;
 import com.l2jserver.gameserver.util.FloodProtectorConfig;
 import com.l2jserver.util.L2Properties;
@@ -1579,7 +1580,7 @@ public final class Config
 			ALTERNATE_CLASS_MASTER = Boolean.parseBoolean(Character.getProperty("AlternateClassMaster", "False"));
 			if (ALLOW_CLASS_MASTERS || ALTERNATE_CLASS_MASTER)
 			{
-				CLASS_MASTER_SETTINGS = new ClassMasterSettings(Character.getProperty("ConfigClassMaster"));
+				CLASS_MASTER_SETTINGS = new ClassMasterSettings(Character.getProperty("ConfigClassMaster", ""));
 			}
 			LIFE_CRYSTAL_NEEDED = Boolean.parseBoolean(Character.getProperty("LifeCrystalNeeded", "true"));
 			ES_SP_BOOK_NEEDED = Boolean.parseBoolean(Character.getProperty("EnchantSkillSpBookNeeded", "true"));
@@ -4123,102 +4124,86 @@ public final class Config
 		return tType;
 	}
 	
-	public static class ClassMasterSettings
+	public static final class ClassMasterSettings
 	{
-		private final Map<Integer, Map<Integer, Integer>> _claimItems;
-		private final Map<Integer, Map<Integer, Integer>> _rewardItems;
-		private final Map<Integer, Boolean> _allowedClassChange;
+		private final Map<Integer, List<ItemHolder>> _claimItems = new HashMap<>(3);
+		private final Map<Integer, List<ItemHolder>> _rewardItems = new HashMap<>(3);
+		private final Map<Integer, Boolean> _allowedClassChange = new HashMap<>(3);
 		
-		public ClassMasterSettings(String _configLine)
+		public ClassMasterSettings(String configLine)
 		{
-			_claimItems = new HashMap<>(3);
-			_rewardItems = new HashMap<>(3);
-			_allowedClassChange = new HashMap<>(3);
-			if (_configLine != null)
-			{
-				parseConfigLine(_configLine.trim());
-			}
+			parseConfigLine(configLine.trim());
 		}
 		
-		private void parseConfigLine(String _configLine)
+		private void parseConfigLine(String configLine)
 		{
-			StringTokenizer st = new StringTokenizer(_configLine, ";");
+			if (configLine.isEmpty())
+			{
+				return;
+			}
+			
+			final StringTokenizer st = new StringTokenizer(configLine, ";");
 			
 			while (st.hasMoreTokens())
 			{
 				// get allowed class change
-				int job = Integer.parseInt(st.nextToken());
+				final int job = Integer.parseInt(st.nextToken());
 				
 				_allowedClassChange.put(job, true);
 				
-				Map<Integer, Integer> _items = new HashMap<>();
+				final List<ItemHolder> requiredItems = new ArrayList<>();
 				// parse items needed for class change
 				if (st.hasMoreTokens())
 				{
-					StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
+					final StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
 					
 					while (st2.hasMoreTokens())
 					{
-						StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
-						int _itemId = Integer.parseInt(st3.nextToken());
-						int _quantity = Integer.parseInt(st3.nextToken());
-						_items.put(_itemId, _quantity);
+						final StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
+						final int itemId = Integer.parseInt(st3.nextToken());
+						final int quantity = Integer.parseInt(st3.nextToken());
+						requiredItems.add(new ItemHolder(itemId, quantity));
 					}
 				}
 				
-				_claimItems.put(job, _items);
+				_claimItems.put(job, requiredItems);
 				
-				_items = new HashMap<>();
+				final List<ItemHolder> rewardItems = new ArrayList<>();
 				// parse gifts after class change
 				if (st.hasMoreTokens())
 				{
-					StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
+					final StringTokenizer st2 = new StringTokenizer(st.nextToken(), "[],");
 					
 					while (st2.hasMoreTokens())
 					{
-						StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
-						int _itemId = Integer.parseInt(st3.nextToken());
-						int _quantity = Integer.parseInt(st3.nextToken());
-						_items.put(_itemId, _quantity);
+						final StringTokenizer st3 = new StringTokenizer(st2.nextToken(), "()");
+						final int itemId = Integer.parseInt(st3.nextToken());
+						final int quantity = Integer.parseInt(st3.nextToken());
+						rewardItems.add(new ItemHolder(itemId, quantity));
 					}
 				}
 				
-				_rewardItems.put(job, _items);
+				_rewardItems.put(job, rewardItems);
 			}
 		}
 		
 		public boolean isAllowed(int job)
 		{
-			if (_allowedClassChange == null)
+			if ((_allowedClassChange == null) || !_allowedClassChange.containsKey(job))
 			{
 				return false;
 			}
-			if (_allowedClassChange.containsKey(job))
-			{
-				return _allowedClassChange.get(job);
-			}
-			
-			return false;
+			return _allowedClassChange.get(job);
 		}
 		
-		public Map<Integer, Integer> getRewardItems(int job)
+		public List<ItemHolder> getRewardItems(int job)
 		{
-			if (_rewardItems.containsKey(job))
-			{
-				return _rewardItems.get(job);
-			}
-			
-			return null;
+			return _rewardItems.get(job);
 		}
 		
-		public Map<Integer, Integer> getRequireItems(int job)
+		public List<ItemHolder> getRequireItems(int job)
 		{
-			if (_claimItems.containsKey(job))
-			{
-				return _claimItems.get(job);
-			}
-			
-			return null;
+			return _claimItems.get(job);
 		}
 	}
 	

+ 13 - 24
L2J_Server_BETA/java/com/l2jserver/gameserver/model/actor/instance/L2ClassMasterInstance.java

@@ -24,6 +24,7 @@ import com.l2jserver.gameserver.datatables.ClassListData;
 import com.l2jserver.gameserver.datatables.ItemTable;
 import com.l2jserver.gameserver.model.actor.templates.L2NpcTemplate;
 import com.l2jserver.gameserver.model.base.ClassId;
+import com.l2jserver.gameserver.model.holders.ItemHolder;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.ExBrExtraUserInfo;
 import com.l2jserver.gameserver.network.serverpackets.NpcHtmlMessage;
@@ -198,7 +199,7 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
 		}
 		else if (!Config.CLASS_MASTER_SETTINGS.isAllowed(level))
 		{
-			int jobLevel = player.getClassId().level();
+			final int jobLevel = player.getClassId().level();
 			final StringBuilder sb = new StringBuilder(100);
 			sb.append("<html><body>");
 			switch (jobLevel)
@@ -351,7 +352,7 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
 			return false;
 		}
 		
-		int newJobLevel = currentClassId.level() + 1;
+		final int newJobLevel = currentClassId.level() + 1;
 		
 		// Weight/Inventory check
 		if (!Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).isEmpty() && !player.isInventoryUnder90(false))
@@ -361,10 +362,9 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
 		}
 		
 		// check if player have all required items for class transfer
-		for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet())
+		for (ItemHolder holder : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel))
 		{
-			int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId);
-			if (player.getInventory().getInventoryItemCount(_itemId, -1) < _count)
+			if (player.getInventory().getInventoryItemCount(holder.getId(), -1) < holder.getCount())
 			{
 				player.sendPacket(SystemMessageId.NOT_ENOUGH_ITEMS);
 				return false;
@@ -372,20 +372,18 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
 		}
 		
 		// get all required items for class transfer
-		for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).keySet())
+		for (ItemHolder holder : Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel))
 		{
-			int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(newJobLevel).get(_itemId);
-			if (!player.destroyItemByItemId("ClassMaster", _itemId, _count, player, true))
+			if (!player.destroyItemByItemId("ClassMaster", holder.getId(), holder.getCount(), player, true))
 			{
 				return false;
 			}
 		}
 		
 		// reward player with items
-		for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).keySet())
+		for (ItemHolder holder : Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel))
 		{
-			int _count = Config.CLASS_MASTER_SETTINGS.getRewardItems(newJobLevel).get(_itemId);
-			player.addItem("ClassMaster", _itemId, _count, player, true);
+			player.addItem("ClassMaster", holder.getId(), holder.getCount(), player, true);
 		}
 		
 		player.setClassId(val);
@@ -436,15 +434,7 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
 	 */
 	private static final boolean validateClassId(ClassId oldCID, int val)
 	{
-		try
-		{
-			return validateClassId(oldCID, ClassId.getClassId(val));
-		}
-		catch (Exception e)
-		{
-			// possible ArrayOutOfBoundsException
-		}
-		return false;
+		return validateClassId(oldCID, ClassId.getClassId(val));
 	}
 	
 	/**
@@ -479,11 +469,10 @@ public final class L2ClassMasterInstance extends L2MerchantInstance
 		{
 			return "<tr><td>none</td></tr>";
 		}
-		StringBuilder sb = new StringBuilder();
-		for (int _itemId : Config.CLASS_MASTER_SETTINGS.getRequireItems(level).keySet())
+		final StringBuilder sb = new StringBuilder();
+		for (ItemHolder holder : Config.CLASS_MASTER_SETTINGS.getRequireItems(level))
 		{
-			int _count = Config.CLASS_MASTER_SETTINGS.getRequireItems(level).get(_itemId);
-			sb.append("<tr><td><font color=\"LEVEL\">" + _count + "</font></td><td>" + ItemTable.getInstance().getTemplate(_itemId).getName() + "</td></tr>");
+			sb.append("<tr><td><font color=\"LEVEL\">" + holder.getCount() + "</font></td><td>" + ItemTable.getInstance().getTemplate(holder.getId()).getName() + "</td></tr>");
 		}
 		return sb.toString();
 	}