2
0
Эх сурвалжийг харах

Players dismissed from clan while in offline shop mode didn't get
penalty

* Minor refactor of time units.

Reported by: valanths1990

Zoey76 9 жил өмнө
parent
commit
9ce857ea08

+ 1 - 1
L2J_Server/java/com/l2jserver/gameserver/data/sql/impl/OfflineTradersTable.java

@@ -65,7 +65,7 @@ public class OfflineTradersTable
 			{
 				try
 				{
-					if ((pc.getPrivateStoreType() != PrivateStoreType.NONE) && ((pc.getClient() == null) || pc.getClient().isDetached()))
+					if ((pc.getPrivateStoreType() != PrivateStoreType.NONE) && pc.isInOfflineMode())
 					{
 						stm3.setInt(1, pc.getObjectId()); // Char Id
 						stm3.setLong(2, pc.getOfflineStartTime());

+ 18 - 17
L2J_Server/java/com/l2jserver/gameserver/model/L2Clan.java

@@ -30,6 +30,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 import java.util.logging.Level;
 import java.util.logging.Logger;
@@ -356,13 +357,14 @@ public class L2Clan implements IIdentifiable, INamable
 	public void addClanMember(L2PcInstance player)
 	{
 		final L2ClanMember member = new L2ClanMember(this, player);
-		// store in memory
-		addClanMember(member);
 		member.setPlayerInstance(player);
+		addClanMember(member);
+		
 		player.setClan(this);
 		player.setPledgeClass(L2ClanMember.calculatePledgeClass(player));
 		player.sendPacket(new PledgeShowMemberListUpdate(player));
 		player.sendPacket(new PledgeSkillList(this));
+		
 		addSkillEffects(player);
 		
 		// Notify to scripts
@@ -469,9 +471,10 @@ public class L2Clan implements IIdentifiable, INamable
 		{
 			CastleManager.getInstance().removeCirclet(exMember, getCastleId());
 		}
-		if (exMember.isOnline())
+		
+		final L2PcInstance player = exMember.getPlayerInstance();
+		if (player != null)
 		{
-			L2PcInstance player = exMember.getPlayerInstance();
 			if (!player.isNoble())
 			{
 				player.setTitle("");
@@ -482,7 +485,7 @@ public class L2Clan implements IIdentifiable, INamable
 			if (player.isClanLeader())
 			{
 				SiegeManager.getInstance().removeSiegeSkills(player);
-				player.setClanCreateExpiryTime(System.currentTimeMillis() + (Config.ALT_CLAN_CREATE_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
+				player.setClanCreateExpiryTime(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_CREATE_DAYS));
 			}
 			// remove Clan skills from Player
 			removeSkillEffects(player);
@@ -513,7 +516,7 @@ public class L2Clan implements IIdentifiable, INamable
 		}
 		else
 		{
-			removeMemberInDatabase(exMember, clanJoinExpiryTime, getLeaderId() == objectId ? System.currentTimeMillis() + (Config.ALT_CLAN_CREATE_DAYS * 86400000L) : 0);
+			removeMemberInDatabase(exMember.getObjectId(), clanJoinExpiryTime, getLeaderId() == objectId ? System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_CREATE_DAYS) : 0);
 		}
 		
 		// Notify to scripts
@@ -1004,31 +1007,29 @@ public class L2Clan implements IIdentifiable, INamable
 	}
 	
 	/**
-	 * @param member the clan member to be removed.
-	 * @param clanJoinExpiryTime
-	 * @param clanCreateExpiryTime
+	 * Removes a clan member from this clan.
+	 * @param playerId the clan member object ID to be removed
+	 * @param clanJoinExpiryTime the time penalty for the player to join a new clan
+	 * @param clanCreateExpiryTime the time penalty for the player to create a new clan
 	 */
-	private void removeMemberInDatabase(L2ClanMember member, long clanJoinExpiryTime, long clanCreateExpiryTime)
+	private void removeMemberInDatabase(int playerId, long clanJoinExpiryTime, long clanCreateExpiryTime)
 	{
 		try (Connection con = L2DatabaseFactory.getInstance().getConnection();
 			PreparedStatement ps1 = con.prepareStatement("UPDATE characters SET clanid=0, title=?, clan_join_expiry_time=?, clan_create_expiry_time=?, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0 WHERE charId=?");
 			PreparedStatement ps2 = con.prepareStatement("UPDATE characters SET apprentice=0 WHERE apprentice=?");
 			PreparedStatement ps3 = con.prepareStatement("UPDATE characters SET sponsor=0 WHERE sponsor=?"))
 		{
+			// Remove clan member.
 			ps1.setString(1, "");
 			ps1.setLong(2, clanJoinExpiryTime);
 			ps1.setLong(3, clanCreateExpiryTime);
-			ps1.setInt(4, member.getObjectId());
+			ps1.setInt(4, playerId);
 			ps1.execute();
-			if (Config.DEBUG)
-			{
-				_log.fine("clan member removed in db: " + getId());
-			}
 			// Remove apprentice.
-			ps2.setInt(1, member.getObjectId());
+			ps2.setInt(1, playerId);
 			ps2.execute();
 			// Remove sponsor.
-			ps3.setInt(1, member.getObjectId());
+			ps3.setInt(1, playerId);
 			ps3.execute();
 		}
 		catch (Exception e)

+ 3 - 7
L2J_Server/java/com/l2jserver/gameserver/model/L2ClanMember.java

@@ -149,8 +149,8 @@ public class L2ClanMember
 	}
 	
 	/**
-	 * Checks if is online.
-	 * @return true, if is online
+	 * Verifies if the clan member is online.
+	 * @return {@code true} if is online
 	 */
 	public boolean isOnline()
 	{
@@ -158,11 +158,7 @@ public class L2ClanMember
 		{
 			return false;
 		}
-		if (_player.getClient() == null)
-		{
-			return false;
-		}
-		if (_player.getClient().isDetached())
+		if (_player.isInOfflineMode())
 		{
 			return false;
 		}

+ 14 - 2
L2J_Server/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java

@@ -7545,13 +7545,25 @@ public final class L2PcInstance extends L2Playable
 	
 	public int isOnlineInt()
 	{
-		if (_isOnline && (getClient() != null))
+		if (_isOnline && (_client != null))
 		{
-			return getClient().isDetached() ? 2 : 1;
+			return _client.isDetached() ? 2 : 1;
 		}
 		return 0;
 	}
 	
+	/**
+	 * Verifies if the player is in offline mode.<br>
+	 * The offline mode may happen for different reasons:<br>
+	 * Abnormally: Player gets abrouptaly disconnected from server.<br>
+	 * Normally: The player gets into offline shop mode, only avaiable by enabling the offline shop mod.
+	 * @return {@code true} if the player is in offline mode, {@code false} otherwise
+	 */
+	public boolean isInOfflineMode()
+	{
+		return (_client == null) || _client.isDetached();
+	}
+	
 	public boolean isIn7sDungeon()
 	{
 		return _isIn7sDungeon;

+ 1 - 1
L2J_Server/java/com/l2jserver/gameserver/network/clientpackets/RequestAnswerJoinPledge.java

@@ -86,7 +86,7 @@ public final class RequestAnswerJoinPledge extends L2GameClientPacket
 				activeChar.setPledgeType(requestPacket.getPledgeType());
 				if (requestPacket.getPledgeType() == L2Clan.SUBUNIT_ACADEMY)
 				{
-					activeChar.setPowerGrade(9); // adademy
+					activeChar.setPowerGrade(9); // Academy
 					activeChar.setLvlJoinedAcademy(activeChar.getLevel());
 				}
 				else

+ 4 - 2
L2J_Server/java/com/l2jserver/gameserver/network/clientpackets/RequestOustPledgeMember.java

@@ -18,6 +18,8 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import java.util.concurrent.TimeUnit;
+
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.ClanPrivilege;
 import com.l2jserver.gameserver.model.L2Clan;
@@ -82,8 +84,8 @@ public final class RequestOustPledgeMember extends L2GameClientPacket
 		}
 		
 		// this also updates the database
-		clan.removeClanMember(member.getObjectId(), System.currentTimeMillis() + (Config.ALT_CLAN_JOIN_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
-		clan.setCharPenaltyExpiryTime(System.currentTimeMillis() + (Config.ALT_CLAN_JOIN_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
+		clan.removeClanMember(member.getObjectId(), System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_JOIN_DAYS));
+		clan.setCharPenaltyExpiryTime(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_JOIN_DAYS));
 		clan.updateClanInDB();
 		
 		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_MEMBER_S1_EXPELLED);

+ 3 - 1
L2J_Server/java/com/l2jserver/gameserver/network/clientpackets/RequestWithdrawalPledge.java

@@ -18,6 +18,8 @@
  */
 package com.l2jserver.gameserver.network.clientpackets;
 
+import java.util.concurrent.TimeUnit;
+
 import com.l2jserver.Config;
 import com.l2jserver.gameserver.model.L2Clan;
 import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -65,7 +67,7 @@ public final class RequestWithdrawalPledge extends L2GameClientPacket
 		
 		L2Clan clan = activeChar.getClan();
 		
-		clan.removeClanMember(activeChar.getObjectId(), System.currentTimeMillis() + (Config.ALT_CLAN_JOIN_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
+		clan.removeClanMember(activeChar.getObjectId(), System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_JOIN_DAYS));
 		
 		SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_WITHDRAWN_FROM_THE_CLAN);
 		sm.addString(activeChar.getName());