فهرست منبع

fix: save crest id to database after removing the crest

janiii 15 سال پیش
والد
کامیت
a2281cd92e

+ 91 - 80
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestExSetPledgeCrestLarge.java

@@ -28,7 +28,6 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
-
 /**
  * Format : chdb
  * c (id) 0xD0
@@ -42,109 +41,121 @@ public final class RequestExSetPledgeCrestLarge extends L2GameClientPacket
 {
 	private static final String _C__D0_11_REQUESTEXSETPLEDGECRESTLARGE = "[C] D0:11 RequestExSetPledgeCrestLarge";
 	static Logger _log = Logger.getLogger(RequestExSetPledgeCrestLarge.class.getName());
-	private int _size;
+	
+	private int _length;
 	private byte[] _data;
-
+	
 	@Override
 	protected void readImpl()
 	{
-		_size = readD();
-		if(_size > 2176)
+		_length = readD();
+		if (_length > 2176)
 			return;
-		if(_size > 0) // client CAN send a RequestExSetPledgeCrestLarge with the size set to 0 then format is just chd
-		{
-			_data = new byte[_size];
-			readB(_data);
-		}
+		
+		_data = new byte[_length];
+		readB(_data);
 	}
-
+	
 	/* (non-Javadoc)
 	 * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#runImpl()
 	 */
 	@Override
-	protected
-	void runImpl()
+	protected void runImpl()
 	{
 		L2PcInstance activeChar = getClient().getActiveChar();
-		if (activeChar == null) return;
-
+		if (activeChar == null)
+			return;
+		
 		L2Clan clan = activeChar.getClan();
-		if (clan == null) return;
-
-		if (_data == null)
+		if (clan == null)
+			return;
+		
+		if (_length < 0)
+		{
+			activeChar.sendMessage("File transfer error.");
+			return;
+		}
+		if (_length > 2176)
+		{
+			activeChar.sendMessage("The insignia file size is greater than 2176 bytes.");
+			return;
+		}
+		
+		boolean updated = false;
+		int crestLargeId = -1;
+		if (_length == 0 || _data == null)
 		{
 			CrestCache.getInstance().removePledgeCrestLarge(clan.getCrestLargeId());
-			clan.setCrestLargeId(0);
-            clan.setHasCrestLarge(false);
-
-            activeChar.sendMessage("The insignia has been removed.");
-
-            for (L2PcInstance member : clan.getOnlineMembers(0))
-                member.broadcastUserInfo();
-
-            return;
+			clan.setCrestLargeId(crestLargeId = 0);
+			clan.setHasCrestLarge(false);
+			
+			activeChar.sendMessage("The insignia has been removed.");
+			
+			updated = true;
 		}
-
-		if (_size > 2176)
-        {
-        	activeChar.sendMessage("The insignia file size is greater than 2176 bytes.");
-        	return;
-        }
-
+		
 		if ((activeChar.getClanPrivileges() & L2Clan.CP_CL_REGISTER_CREST) == L2Clan.CP_CL_REGISTER_CREST)
 		{
-			if(clan.getHasCastle() == 0 && clan.getHasHideout() == 0)
+			if (clan.getHasCastle() == 0 && clan.getHasHideout() == 0)
 			{
 				activeChar.sendMessage("Only a clan that owns a clan hall or a castle can get their emblem displayed on clan related items"); //there is a system message for that but didnt found the id
 				return;
 			}
-
+			
 			CrestCache crestCache = CrestCache.getInstance();
-
+			
 			int newId = IdFactory.getInstance().getNextId();
-
-            if (clan.hasCrestLarge())
-            {
-                crestCache.removePledgeCrestLarge(clan.getCrestLargeId());
-            }
-
-            if (!crestCache.savePledgeCrestLarge(newId,_data))
-            {
-                _log.log(Level.INFO, "Error loading large crest of clan:" + clan.getName());
-                return;
-            }
-
-            Connection con = null;
-
-            try
-            {
-                con = L2DatabaseFactory.getInstance().getConnection();
-                PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET crest_large_id = ? WHERE clan_id = ?");
-                statement.setInt(1, newId);
-                statement.setInt(2, clan.getClanId());
-                statement.executeUpdate();
-                statement.close();
-            }
-            catch (SQLException e)
-            {
-                _log.warning("could not update the large crest id:"+e.getMessage());
-            }
-            finally
-            {
-                try { con.close(); } catch (Exception e) {}
-            }
-
-            clan.setCrestLargeId(newId);
-            clan.setHasCrestLarge(true);
-
-            activeChar.sendPacket(new SystemMessage(SystemMessageId.CLAN_EMBLEM_WAS_SUCCESSFULLY_REGISTERED));
-
-            for (L2PcInstance member : clan.getOnlineMembers(0))
-                member.broadcastUserInfo();
-
+			
+			if (clan.hasCrestLarge())
+				crestCache.removePledgeCrestLarge(clan.getCrestLargeId());
+			
+			if (!crestCache.savePledgeCrestLarge(newId, _data))
+			{
+				_log.log(Level.INFO, "Error saving large crest for clan " + clan.getName() + " [" + clan.getClanId() + "]");
+				return;
+			}
+			
+			clan.setCrestLargeId(newId);
+			clan.setHasCrestLarge(true);
+			
+			activeChar.sendPacket(new SystemMessage(SystemMessageId.CLAN_EMBLEM_WAS_SUCCESSFULLY_REGISTERED));
+			
+			updated = true;
+		}
+		
+		if (updated && crestLargeId != -1)
+		{
+			Connection con = null;
+			
+			try
+			{
+				con = L2DatabaseFactory.getInstance().getConnection();
+				PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET crest_large_id = ? WHERE clan_id = ?");
+				statement.setInt(1, crestLargeId);
+				statement.setInt(2, clan.getClanId());
+				statement.executeUpdate();
+				statement.close();
+			}
+			catch (SQLException e)
+			{
+				_log.warning("Could not update large crest for clan " + clan.getName() + " [" + clan.getClanId() + "] : " + e.getMessage());
+			}
+			finally
+			{
+				try
+				{
+					con.close();
+				}
+				catch (Exception e)
+				{
+				}
+			}
+			
+			for (L2PcInstance member : clan.getOnlineMembers(0))
+				member.broadcastUserInfo();
 		}
 	}
-
+	
 	/* (non-Javadoc)
 	 * @see com.l2jserver.gameserver.BasePacket#getType()
 	 */
@@ -153,5 +164,5 @@ public final class RequestExSetPledgeCrestLarge extends L2GameClientPacket
 	{
 		return _C__D0_11_REQUESTEXSETPLEDGECRESTLARGE;
 	}
-
-}
+	
+}

+ 105 - 98
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestSetAllyCrest.java

@@ -27,113 +27,120 @@ import com.l2jserver.gameserver.idfactory.IdFactory;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 
-
 /**
- * This class ...
+ * Client packet for setting ally crest.
  *
- * @version $Revision: 1.2.2.1.2.4 $ $Date: 2005/03/27 15:29:30 $
  */
 public final class RequestSetAllyCrest extends L2GameClientPacket
 {
-    private static final String _C__87_REQUESTSETALLYCREST = "[C] 87 RequestSetAllyCrest";
-    static Logger _log = Logger.getLogger(RequestSetAllyCrest.class.getName());
-
-    private int _length;
-    private byte[] _data;
-
-    @Override
+	private static final String _C__87_REQUESTSETALLYCREST = "[C] 87 RequestSetAllyCrest";
+	static Logger _log = Logger.getLogger(RequestSetAllyCrest.class.getName());
+	
+	private int _length;
+	private byte[] _data;
+	
+	@Override
 	protected void readImpl()
-    {
-        _length  = readD();
-        if (_length < 0 || _length > 192)
+	{
+		_length = readD();
+		if (_length > 192)
 			return;
-        
-        _data = new byte[_length];
-        readB(_data);
-    }
-
-    @Override
+		
+		_data = new byte[_length];
+		readB(_data);
+	}
+	
+	@Override
 	protected void runImpl()
-    {
-        L2PcInstance activeChar = getClient().getActiveChar();
-        if (activeChar == null)
-        	return;
-
-        
-        if (_length < 0)
+	{
+		L2PcInstance activeChar = getClient().getActiveChar();
+		if (activeChar == null)
+			return;
+		
+		if (_length < 0)
 		{
-        	activeChar.sendMessage("File transfer error.");
-        	return;
-        }
+			activeChar.sendMessage("File transfer error.");
+			return;
+		}
 		if (_length > 192)
-        {
-        	activeChar.sendMessage("The crest file size was too big (max 192 bytes).");
-        	return;
-        }
-        
-        if (activeChar.getAllyId() != 0)
-        {
-            L2Clan leaderclan = ClanTable.getInstance().getClan(activeChar.getAllyId());
-
-            if (activeChar.getClanId() != leaderclan.getClanId() || !activeChar.isClanLeader())
-            {
-                return;
-            }
-
-            CrestCache crestCache = CrestCache.getInstance();
-
-            int newId = IdFactory.getInstance().getNextId();
-
-            if (leaderclan.getAllyCrestId() != 0)
-            {
-                crestCache.removeAllyCrest(leaderclan.getAllyCrestId());
-            }
-
-            if (!crestCache.saveAllyCrest(newId,_data))
-            {
-                _log.log(Level.INFO, "Error loading crest of ally:" + leaderclan.getAllyName());
-                return;
-            }
-
-            Connection con = null;
-
-            try
-            {
-                con = L2DatabaseFactory.getInstance().getConnection();
-                PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET ally_crest_id = ? WHERE ally_id = ?");
-                statement.setInt(1, newId);
-                statement.setInt(2, leaderclan.getAllyId());
-                statement.executeUpdate();
-                statement.close();
-            }
-            catch (SQLException e)
-            {
-                _log.warning("could not update the ally crest id:"+e.getMessage());
-            }
-            finally
-            {
-                try { con.close(); } catch (Exception e) {}
-            }
-
-
-            for (L2Clan clan : ClanTable.getInstance().getClans())
-            {
-                if (clan.getAllyId() == activeChar.getAllyId())
-                {
-                    clan.setAllyCrestId(newId);
-                    for (L2PcInstance member : clan.getOnlineMembers(0))
-                        member.broadcastUserInfo();
-                }
-            }
-        }
-    }
-
-    /* (non-Javadoc)
-     * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType()
-     */
-    @Override
+		{
+			activeChar.sendMessage("The ally crest file size was too big (max 192 bytes).");
+			return;
+		}
+		
+		if (activeChar.getAllyId() != 0)
+		{
+			L2Clan leaderclan = ClanTable.getInstance().getClan(activeChar.getAllyId());
+			
+			if (activeChar.getClanId() != leaderclan.getClanId() || !activeChar.isClanLeader())
+			{
+				return;
+			}
+			
+			CrestCache crestCache = CrestCache.getInstance();
+			boolean remove = false;
+			if (_length == 0 || _data.length == 0)
+				remove = true;
+			
+			int newId = 0;
+			if (!remove)
+				newId = IdFactory.getInstance().getNextId();
+			
+			if (leaderclan.getAllyCrestId() != 0)
+			{
+				crestCache.removeAllyCrest(leaderclan.getAllyCrestId());
+			}
+			
+			if (!remove && !crestCache.saveAllyCrest(newId, _data))
+			{
+				_log.log(Level.INFO, "Error saving crest for ally " + leaderclan.getAllyName() + " [" + leaderclan.getAllyId() + "]");
+				return;
+			}
+			
+			Connection con = null;
+			
+			try
+			{
+				con = L2DatabaseFactory.getInstance().getConnection();
+				PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET ally_crest_id = ? WHERE ally_id = ?");
+				statement.setInt(1, newId);
+				statement.setInt(2, leaderclan.getAllyId());
+				statement.executeUpdate();
+				statement.close();
+			}
+			catch (SQLException e)
+			{
+				_log.warning("Could not update ally crest for ally " + leaderclan.getAllyName() + " [" + leaderclan.getAllyId() + "] : " + e.getMessage());
+			}
+			finally
+			{
+				try
+				{
+					con.close();
+				}
+				catch (Exception e)
+				{
+				}
+			}
+			
+			for (L2Clan clan : ClanTable.getInstance().getClans())
+			{
+				if (clan.getAllyId() == activeChar.getAllyId())
+				{
+					clan.setAllyCrestId(newId);
+					for (L2PcInstance member : clan.getOnlineMembers(0))
+						member.broadcastUserInfo();
+				}
+			}
+		}
+	}
+	
+	/* (non-Javadoc)
+	 * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType()
+	 */
+	@Override
 	public String getType()
-    {
-        return _C__87_REQUESTSETALLYCREST;
-    }
+	{
+		return _C__87_REQUESTSETALLYCREST;
+	}
 }

+ 77 - 75
L2_GameServer/java/com/l2jserver/gameserver/network/clientpackets/RequestSetPledgeCrest.java

@@ -28,74 +28,69 @@ import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
 import com.l2jserver.gameserver.network.SystemMessageId;
 import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
 
-
 /**
- * This class ...
+ * Client packet for setting/deleting clan crest.
  *
- * @version $Revision: 1.2.2.1.2.4 $ $Date: 2005/03/27 15:29:30 $
  */
 public final class RequestSetPledgeCrest extends L2GameClientPacket
 {
 	private static final String _C__53_REQUESTSETPLEDGECREST = "[C] 53 RequestSetPledgeCrest";
 	static Logger _log = Logger.getLogger(RequestSetPledgeCrest.class.getName());
-
+	
 	private int _length;
 	private byte[] _data;
-
+	
 	@Override
 	protected void readImpl()
 	{
-		_length  = readD();
-		if (_length < 0 || _length > 256)
+		_length = readD();
+		if (_length > 256)
 			return;
-
+		
 		_data = new byte[_length];
 		readB(_data);
 	}
-
+	
 	@Override
 	protected void runImpl()
 	{
 		L2PcInstance activeChar = getClient().getActiveChar();
-
 		if (activeChar == null)
-		    return;
-
+			return;
+		
 		L2Clan clan = activeChar.getClan();
 		if (clan == null)
-		    return;
-
+			return;
+		
 		if (clan.getDissolvingExpiryTime() > System.currentTimeMillis())
 		{
 			activeChar.sendPacket(new SystemMessage(SystemMessageId.CANNOT_SET_CREST_WHILE_DISSOLUTION_IN_PROGRESS));
-        	return;
+			return;
 		}
-
+		
 		if (_length < 0)
 		{
-        	activeChar.sendMessage("File transfer error.");
-        	return;
-        }
+			activeChar.sendMessage("File transfer error.");
+			return;
+		}
 		if (_length > 256)
-        {
-        	activeChar.sendMessage("The clan crest file size was too big (max 256 bytes).");
-        	return;
-        }
+		{
+			activeChar.sendMessage("The clan crest file size was too big (max 256 bytes).");
+			return;
+		}
+		boolean updated = false;
+		int crestId = -1;
 		if (_length == 0 || _data.length == 0)
 		{
 			CrestCache.getInstance().removePledgeCrest(clan.getCrestId());
-			clan.setCrestId(0);
-            clan.setHasCrest(false);
-            
+			clan.setCrestId(crestId = 0);
+			clan.setHasCrest(false);
+			
 			activeChar.sendPacket(new SystemMessage(SystemMessageId.CLAN_CREST_HAS_BEEN_DELETED));
-
-            for (L2PcInstance member : clan.getOnlineMembers(0))
-                member.broadcastUserInfo();
-
-            return;
+			
+			updated = true;
 		}
 		
-
 		if ((activeChar.getClanPrivileges() & L2Clan.CP_CL_REGISTER_CREST) == L2Clan.CP_CL_REGISTER_CREST)
 		{
 			if (clan.getLevel() < 3)
@@ -103,51 +98,58 @@ public final class RequestSetPledgeCrest extends L2GameClientPacket
 				activeChar.sendPacket(new SystemMessage(SystemMessageId.CLAN_LVL_3_NEEDED_TO_SET_CREST));
 				return;
 			}
-
-            CrestCache crestCache = CrestCache.getInstance();
-
-            int newId = IdFactory.getInstance().getNextId();
-
-            if(clan.hasCrest())
-            {
-            	crestCache.removePledgeCrest(clan.getCrestId());
-            }
-
-            if (!crestCache.savePledgeCrest(newId,_data))
-            {
-                _log.log(Level.INFO, "Error loading crest of clan:" + clan.getName());
-                return;
-            }
-
-            Connection con = null;
-
-            try
-            {
-                con = L2DatabaseFactory.getInstance().getConnection();
-                PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET crest_id = ? WHERE clan_id = ?");
-                statement.setInt(1, newId);
-                statement.setInt(2, clan.getClanId());
-                statement.executeUpdate();
-                statement.close();
-            }
-            catch (SQLException e)
-            {
-                _log.warning("could not update the crest id:"+e.getMessage());
-            }
-            finally
-            {
-                try { con.close(); } catch (Exception e) {}
-            }
-
-            clan.setCrestId(newId);
-            clan.setHasCrest(true);
-
-            for (L2PcInstance member : clan.getOnlineMembers(0))
-                member.broadcastUserInfo();
-
+			
+			CrestCache crestCache = CrestCache.getInstance();
+			
+			int newId = IdFactory.getInstance().getNextId();
+			
+			if (clan.hasCrest())
+				crestCache.removePledgeCrest(clan.getCrestId());
+			
+			if (!crestCache.savePledgeCrest(newId, _data))
+			{
+				_log.log(Level.INFO, "Error saving crest for clan " + clan.getName() + " [" + clan.getClanId() + "]");
+				return;
+			}
+			
+			clan.setCrestId(crestId = newId);
+			clan.setHasCrest(true);
+			
+			updated = true;
+		}
+		if (updated && crestId != -1)
+		{
+			Connection con = null;
+			
+			try
+			{
+				con = L2DatabaseFactory.getInstance().getConnection();
+				PreparedStatement statement = con.prepareStatement("UPDATE clan_data SET crest_id = ? WHERE clan_id = ?");
+				statement.setInt(1, crestId);
+				statement.setInt(2, clan.getClanId());
+				statement.executeUpdate();
+				statement.close();
+			}
+			catch (SQLException e)
+			{
+				_log.warning("Could not update crest for clan " + clan.getName() + " [" + clan.getClanId() + "] : " + e.getMessage());
+			}
+			finally
+			{
+				try
+				{
+					con.close();
+				}
+				catch (Exception e)
+				{
+				}
+			}
+			
+			for (L2PcInstance member : clan.getOnlineMembers(0))
+				member.broadcastUserInfo();
 		}
 	}
-
+	
 	/* (non-Javadoc)
 	 * @see com.l2jserver.gameserver.clientpackets.ClientBasePacket#getType()
 	 */