浏览代码

BETA: Henna related fixes:
* Reverting [5254], enhanced loops aren't different than iterators (or index array), [http://docs.oracle.com/javase/1.5.0/docs/guide/language/foreach.html except that enhanced loops are less prone to errors (typos) and they look better].
* Replacing array with list.
* Let's avoid finalizing methods in finalized classes, since they cannot be overridden anymore.
* Unhardcoded another "is allowed" henna check.
* Fix for #6131

Zoey76 13 年之前
父节点
当前提交
9b44e0caf2

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

@@ -149,6 +149,7 @@ import com.l2jserver.gameserver.model.base.ClassId;
 import com.l2jserver.gameserver.model.base.ClassLevel;
 import com.l2jserver.gameserver.model.base.PlayerClass;
 import com.l2jserver.gameserver.model.base.Race;
+import com.l2jserver.gameserver.model.base.Sex;
 import com.l2jserver.gameserver.model.base.SubClass;
 import com.l2jserver.gameserver.model.effects.AbnormalEffect;
 import com.l2jserver.gameserver.model.effects.EffectTemplate;
@@ -1103,7 +1104,7 @@ public final class L2PcInstance extends L2Playable
 		
 		// Set the base class ID to that of the actual class ID.
 		player.setBaseClass(player.getClassId());
-		// Kept for backwards compabitility.
+		// Kept for backwards compatibility.
 		player.setNewbie(1);
 		// Add the player in the characters table of the database
 		boolean ok = player.createDb();
@@ -7281,15 +7282,14 @@ public final class L2PcInstance extends L2Playable
 	{
 		L2PcInstance player = null;
 		Connection con = null;
-		
 		try
 		{
 			// Retrieve the L2PcInstance from the characters table of the database
 			con = L2DatabaseFactory.getInstance().getConnection();
 			
-			PreparedStatement statement = con.prepareStatement(RESTORE_CHARACTER);
+			final PreparedStatement statement = con.prepareStatement(RESTORE_CHARACTER);
 			statement.setInt(1, objectId);
-			ResultSet rset = statement.executeQuery();
+			final ResultSet rset = statement.executeQuery();
 			
 			double currentCp = 0;
 			double currentHp = 0;
@@ -7298,7 +7298,7 @@ public final class L2PcInstance extends L2Playable
 			while (rset.next())
 			{
 				final int activeClassId = rset.getInt("classid");
-				final boolean female = rset.getInt("sex") != 0;
+				final boolean female = rset.getInt("sex") != Sex.MALE;
 				final L2PcTemplate template = CharTemplateTable.getInstance().getTemplate(activeClassId);
 				PcAppearance app = new PcAppearance(rset.getByte("face"), rset.getByte("hairColor"), rset.getByte("hairStyle"), female);
 				
@@ -8734,19 +8734,19 @@ public final class L2PcInstance extends L2Playable
 		_hennaWIT = 0;
 		_hennaDEX = 0;
 		
-		for (int i = 0; i < 3; i++)
+		for (L2Henna h : _henna)
  		{
-			if (_henna[i] == null)
+			if (h == null)
 			{
 				continue;
 			}
 			
-			_hennaINT += _henna[i].getStatINT() > 5 ? 5 : _henna[i].getStatINT();
-			_hennaSTR += _henna[i].getStatSTR() > 5 ? 5 : _henna[i].getStatSTR();
-			_hennaMEN += _henna[i].getStatMEN() > 5 ? 5 : _henna[i].getStatMEN();
-			_hennaCON += _henna[i].getStatCON() > 5 ? 5 : _henna[i].getStatCON();
-			_hennaWIT += _henna[i].getStatWIT() > 5 ? 5 : _henna[i].getStatWIT();
-			_hennaDEX += _henna[i].getStatDEX() > 5 ? 5 : _henna[i].getStatDEX();
+			_hennaINT += (_hennaINT + h.getStatINT() > 5) ? 5 - _hennaINT : h.getStatINT();
+			_hennaSTR += (_hennaSTR + h.getStatSTR() > 5) ? 5 - _hennaSTR : h.getStatSTR();
+			_hennaMEN += (_hennaMEN + h.getStatMEN() > 5) ? 5 - _hennaMEN : h.getStatMEN();
+			_hennaCON +=(_hennaMEN + h.getStatCON() > 5) ? 5 - _hennaCON : h.getStatCON();
+			_hennaWIT += (_hennaWIT + h.getStatWIT() > 5) ? 5 - _hennaWIT : h.getStatWIT();
+			_hennaDEX += (_hennaDEX + h.getStatDEX() > 5) ? 5 - _hennaDEX : h.getStatDEX();
  		}
  	}
 	

+ 9 - 9
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/GMHennaInfo.java

@@ -14,6 +14,9 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.L2Henna;
 
@@ -25,25 +28,22 @@ public final class GMHennaInfo extends L2GameServerPacket
 	private static final String _S__F0_GMHENNAINFO = "[S] F0 GMHennaInfo";
 	
 	private final L2PcInstance _activeChar;
-	private final L2Henna[] _hennas = new L2Henna[3];
-	private final int _count;
+	private final List<L2Henna> _hennas = new ArrayList<>();
 	
 	public GMHennaInfo(L2PcInstance player)
 	{
 		_activeChar = player;
-		int j = 0;
 		for (L2Henna henna : _activeChar.getHennaList())
 		{
 			if (henna != null)
 			{
-				_hennas[j++] = henna;
+				_hennas.add(henna);
 			}
 		}
-		_count = j;
 	}
 	
 	@Override
-	protected final void writeImpl()
+	protected void writeImpl()
 	{
 		writeC(0xF0);
 		writeC(_activeChar.getHennaStatINT()); // equip INT
@@ -53,10 +53,10 @@ public final class GMHennaInfo extends L2GameServerPacket
 		writeC(_activeChar.getHennaStatDEX()); // equip DEX
 		writeC(_activeChar.getHennaStatWIT()); // equip WIT
 		writeD(3); // Slots
-		writeD(_count); // Size
-		for (int i = 0; i < _count; i++)
+		writeD(_hennas.size()); // Size
+		for (L2Henna henna : _hennas)
 		{
-			writeD(_hennas[i].getDyeId());
+			writeD(henna.getDyeId());
 			writeD(0x01);
 		}
 	}

+ 9 - 10
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/HennaInfo.java

@@ -14,6 +14,9 @@
  */
 package com.l2jserver.gameserver.network.serverpackets;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.model.items.L2Henna;
 
@@ -25,25 +28,22 @@ public final class HennaInfo extends L2GameServerPacket
 	private static final String _S__E5_HENNAINFO = "[S] E5 HennaInfo";
 	
 	private final L2PcInstance _activeChar;
-	private final L2Henna[] _hennas = new L2Henna[3];
-	private final int _count;
+	private final List<L2Henna> _hennas = new ArrayList<>();
 	
 	public HennaInfo(L2PcInstance player)
 	{
 		_activeChar = player;
-		int j = 0;
 		for (L2Henna henna : _activeChar.getHennaList())
 		{
 			if (henna != null)
 			{
-				_hennas[j++] = henna;
+				_hennas.add(henna);
 			}
 		}
-		_count = j;
 	}
 	
 	@Override
-	protected final void writeImpl()
+	protected void writeImpl()
 	{
 		writeC(0xE5);
 		writeC(_activeChar.getHennaStatINT()); // equip INT
@@ -52,11 +52,10 @@ public final class HennaInfo extends L2GameServerPacket
 		writeC(_activeChar.getHennaStatMEN()); // equip MEN
 		writeC(_activeChar.getHennaStatDEX()); // equip DEX
 		writeC(_activeChar.getHennaStatWIT()); // equip WIT
-		writeD(3); // Slots
-		writeD(_count); // Size
-		for (int i = 0; i < _count; i++)
+		writeD(_hennas.size()); // Size
+		for (L2Henna henna : _hennas)
 		{
-			writeD(_hennas[i].getDyeId());
+			writeD(henna.getDyeId());
 			writeD(0x01);
 		}
 	}

+ 3 - 3
L2J_Server_BETA/java/com/l2jserver/gameserver/network/serverpackets/HennaItemRemoveInfo.java

@@ -20,7 +20,7 @@ import com.l2jserver.gameserver.model.items.L2Henna;
 /**
  * @author Zoey76
  */
-public class HennaItemRemoveInfo extends L2GameServerPacket
+public final class HennaItemRemoveInfo extends L2GameServerPacket
 {
 	private static final String _S__E7_HENNAITEMREMOVEINFO = "[S] E7 HennaItemRemoveInfo";
 	
@@ -34,14 +34,14 @@ public class HennaItemRemoveInfo extends L2GameServerPacket
 	}
 	
 	@Override
-	protected final void writeImpl()
+	protected void writeImpl()
 	{
 		writeC(0xE7);
 		writeD(_henna.getDyeId()); // symbol Id
 		writeD(_henna.getDyeItemId()); // item id of dye
 		writeQ(_henna.getCancelCount()); // total amount of dye require
 		writeQ(_henna.getCancelFee()); // total amount of Adena require to remove symbol
-		writeD(1); // able to remove or not 0 is false and 1 is true
+		writeD(_henna.isAllowedClass(_activeChar.getClassId()) ? 0x01 : 0x00); // able to remove or not
 		writeQ(_activeChar.getAdena());
 		writeD(_activeChar.getINT()); // current INT
 		writeC(_activeChar.getINT() - _henna.getStatINT()); // equip INT