Sync with L2jServer HighFive Jul 14th 2015.
This commit is contained in:
@@ -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;
|
||||
@@ -353,13 +354,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
|
||||
@@ -466,9 +468,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("");
|
||||
@@ -479,7 +482,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);
|
||||
@@ -510,7 +513,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
|
||||
@@ -1001,31 +1004,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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -692,20 +692,23 @@ public class L2Party extends AbstractPlayerGroup
|
||||
target.addItem("Party", item, player, true);
|
||||
|
||||
// Send messages to other party members about reward
|
||||
if (item.getCount() > 1)
|
||||
if (item.getCount() > 0)
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
msg.addLong(item.getCount());
|
||||
broadcastToPartyMembers(target, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
broadcastToPartyMembers(target, msg);
|
||||
if (item.getCount() > 1)
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
msg.addLong(item.getCount());
|
||||
broadcastToPartyMembers(target, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
broadcastToPartyMembers(target, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -730,20 +733,23 @@ public class L2Party extends AbstractPlayerGroup
|
||||
looter.addItem(spoil ? "Sweeper Party" : "Party", itemId, itemCount, target, true);
|
||||
|
||||
// Send messages to other party members about reward
|
||||
if (itemCount > 1)
|
||||
if (itemCount > 0)
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2_S_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
msg.addLong(itemCount);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
if (itemCount > 1)
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2_S_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
msg.addLong(itemCount);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1022,7 +1022,7 @@ public class L2Attackable extends L2Npc
|
||||
}
|
||||
|
||||
// Broadcast message if RaidBoss was defeated
|
||||
if (isRaid() && !isRaidMinion())
|
||||
if (isRaid() && !isRaidMinion() && (drop.getCount() > 0))
|
||||
{
|
||||
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_DIED_AND_DROPPED_S3_S2_S);
|
||||
sm.addCharName(this);
|
||||
|
||||
@@ -19,10 +19,10 @@
|
||||
package com.l2jserver.gameserver.model.actor.instance;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
@@ -666,7 +666,7 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
// charges
|
||||
private final AtomicInteger _charges = new AtomicInteger();
|
||||
private ScheduledFuture<?> _chargeTask = null;
|
||||
private volatile ScheduledFuture<?> _chargeTask = null;
|
||||
|
||||
// Absorbed Souls
|
||||
private int _souls = 0;
|
||||
@@ -4524,7 +4524,7 @@ public final class L2PcInstance extends L2Playable
|
||||
getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
||||
|
||||
// Check if the L2Object to pick up is a L2ItemInstance
|
||||
if (!(object instanceof L2ItemInstance))
|
||||
if (!(object.isItem()))
|
||||
{
|
||||
// dont try to pickup anything that is not an item :)
|
||||
_log.warning(this + " trying to pickup wrong target." + getTarget());
|
||||
@@ -4533,12 +4533,7 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
L2ItemInstance target = (L2ItemInstance) object;
|
||||
|
||||
// Send a Server->Client packet ActionFailed to this L2PcInstance
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
|
||||
// Send a Server->Client packet StopMove to this L2PcInstance
|
||||
StopMove sm = new StopMove(this);
|
||||
sendPacket(sm);
|
||||
sendPacket(new StopMove(this));
|
||||
|
||||
SystemMessage smsg = null;
|
||||
synchronized (target)
|
||||
@@ -4567,12 +4562,8 @@ public final class L2PcInstance extends L2Playable
|
||||
return;
|
||||
}
|
||||
|
||||
if (isInvul() && !canOverrideCond(PcCondOverride.ITEM_CONDITIONS))
|
||||
if (isInvisible() && !canOverrideCond(PcCondOverride.ITEM_CONDITIONS))
|
||||
{
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
smsg = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_FAILED_TO_PICK_UP_S1);
|
||||
smsg.addItemName(target);
|
||||
sendPacket(smsg);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -6986,7 +6977,7 @@ public final class L2PcInstance extends L2Playable
|
||||
statement.setInt(34, getBaseClass());
|
||||
statement.setInt(35, isNoble() ? 1 : 0);
|
||||
statement.setLong(36, 0);
|
||||
statement.setDate(37, new Date(getCreateDate().getTimeInMillis()));
|
||||
statement.setTimestamp(37, new Timestamp(getCreateDate().getTimeInMillis()));
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -7182,7 +7173,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPcBangPoints(rset.getInt("pccafe_points"));
|
||||
|
||||
// character creation Time
|
||||
player.getCreateDate().setTime(rset.getDate("createDate"));
|
||||
player.getCreateDate().setTimeInMillis(rset.getTimestamp("createDate").getTime());
|
||||
|
||||
// Language
|
||||
player.setLang(rset.getString("language"));
|
||||
@@ -7841,13 +7832,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();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Skill addSkill(Skill newSkill)
|
||||
{
|
||||
@@ -10703,6 +10706,16 @@ public final class L2PcInstance extends L2Playable
|
||||
sendPacket(new SkillCoolTime(this));
|
||||
sendPacket(new ExStorageMaxCount(this));
|
||||
|
||||
// TODO: Fix with Support for Ertheia race.
|
||||
// if (Config.ALTERNATE_CLASS_MASTER)
|
||||
// {
|
||||
// if (Config.CLASS_MASTER_SETTINGS.isAllowed(getClassId().level() + 1) && Config.ALTERNATE_CLASS_MASTER && (((this.getClassId().level() == 1) && (this.getLevel() >= 40)) || ((this.getClassId().level() == 2) && (this.getLevel() >= 76)) || ((this.getClassId().level() == 3) &&
|
||||
// (this.getLevel() >= 85))))
|
||||
// {
|
||||
// L2ClassMasterInstance.showQuestionMark(this);
|
||||
// }
|
||||
// }
|
||||
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSubChange(this), this);
|
||||
return true;
|
||||
}
|
||||
@@ -12932,7 +12945,7 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
if (_transformSkills == null)
|
||||
{
|
||||
_transformSkills = new HashMap<>();
|
||||
_transformSkills = new ConcurrentHashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -12941,15 +12954,23 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
public Skill getTransformSkill(int id)
|
||||
{
|
||||
if (_transformSkills == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return _transformSkills.get(id);
|
||||
}
|
||||
|
||||
public boolean hasTransformSkill(int id)
|
||||
{
|
||||
if (_transformSkills == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return _transformSkills.containsKey(id);
|
||||
}
|
||||
|
||||
public synchronized void removeAllTransformSkills()
|
||||
public void removeAllTransformSkills()
|
||||
{
|
||||
_transformSkills = null;
|
||||
}
|
||||
@@ -13194,8 +13215,13 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
if (_chargeTask != null)
|
||||
{
|
||||
_chargeTask.cancel(false);
|
||||
_chargeTask = null;
|
||||
synchronized (this)
|
||||
{
|
||||
if (_chargeTask != null)
|
||||
{
|
||||
_chargeTask.cancel(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
_chargeTask = ThreadPoolManager.getInstance().scheduleGeneral(new ResetChargesTask(this), 600000);
|
||||
}
|
||||
@@ -14161,9 +14187,9 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
try
|
||||
{
|
||||
for (L2BossZone _zone : GrandBossManager.getInstance().getZones())
|
||||
for (L2BossZone zone : GrandBossManager.getInstance().getZones().values())
|
||||
{
|
||||
_zone.removePlayer(this);
|
||||
zone.removePlayer(this);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@@ -14177,10 +14203,9 @@ public final class L2PcInstance extends L2Playable
|
||||
*/
|
||||
public void checkPlayerSkills()
|
||||
{
|
||||
L2SkillLearn learn;
|
||||
for (Entry<Integer, Skill> e : getSkills().entrySet())
|
||||
{
|
||||
learn = SkillTreesData.getInstance().getClassSkill(e.getKey(), e.getValue().getLevel() % 100, getClassId());
|
||||
final L2SkillLearn learn = SkillTreesData.getInstance().getClassSkill(e.getKey(), e.getValue().getLevel() % 100, getClassId());
|
||||
if (learn != null)
|
||||
{
|
||||
int lvlDiff = e.getKey() == CommonSkill.EXPERTISE.getId() ? 0 : 9;
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
||||
@@ -83,6 +83,6 @@ public class FuncAtkEvasion extends AbstractFunction
|
||||
value += (level - 69) + 2;
|
||||
}
|
||||
}
|
||||
return value;
|
||||
return (int) value;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user