Code improvements.

This commit is contained in:
MobiusDev
2016-04-24 16:30:15 +00:00
parent 8bd51aba1c
commit 2dd14bef9b
860 changed files with 8865 additions and 17041 deletions

View File

@@ -50,8 +50,7 @@ public abstract class AbstractResidence extends ListenersContainer implements IN
protected void initResidentialSkills()
{
final List<L2SkillLearn> residentialSkills = SkillTreesData.getInstance().getAvailableResidentialSkills(getResidenceId());
for (L2SkillLearn s : residentialSkills)
for (L2SkillLearn s : SkillTreesData.getInstance().getAvailableResidentialSkills(getResidenceId()))
{
_residentialSkills.add(new SkillHolder(s.getSkillId(), s.getSkillLevel()));
}

View File

@@ -266,19 +266,12 @@ public class Auction
*/
public synchronized void setBid(L2PcInstance bidder, long bid)
{
long requiredAdena = bid;
if (getHighestBidderName().equals(bidder.getClan().getLeaderName()))
final long requiredAdena = getHighestBidderName().equals(bidder.getClan().getLeaderName()) ? bid - getHighestBidderMaxBid() : bid;
if ((((getHighestBidderId() > 0) && (bid > getHighestBidderMaxBid())) || ((getHighestBidderId() == 0) && (bid >= getStartingBid()))) && takeItem(bidder, requiredAdena))
{
requiredAdena = bid - getHighestBidderMaxBid();
}
if (((getHighestBidderId() > 0) && (bid > getHighestBidderMaxBid())) || ((getHighestBidderId() == 0) && (bid >= getStartingBid())))
{
if (takeItem(bidder, requiredAdena))
{
updateInDB(bidder, bid);
bidder.getClan().setAuctionBiddedAt(_id, true);
return;
}
updateInDB(bidder, bid);
bidder.getClan().setAuctionBiddedAt(_id, true);
return;
}
if ((bid < getStartingBid()) || (bid <= getHighestBidderMaxBid()))
{

View File

@@ -496,14 +496,7 @@ public final class BlockCheckerEngine
spawn.init();
final L2BlockInstance block = (L2BlockInstance) spawn.getLastSpawn();
// switch color
if ((random % 2) == 0)
{
block.setRed(true);
}
else
{
block.setRed(false);
}
block.setRed((random % 2) == 0);
block.disableCoreAI(true);
_spawns.add(spawn);
@@ -542,9 +535,7 @@ public final class BlockCheckerEngine
_redPoints += _numOfBoxes / 2;
_bluePoints += _numOfBoxes / 2;
final int timeLeft = (int) ((getStarterTime() - System.currentTimeMillis()) / 1000);
final ExCubeGameChangePoints changePoints = new ExCubeGameChangePoints(timeLeft, getBluePoints(), getRedPoints());
getHolder().broadCastPacketToTeam(changePoints);
getHolder().broadCastPacketToTeam((new ExCubeGameChangePoints((int) ((getStarterTime() - System.currentTimeMillis()) / 1000), getBluePoints(), getRedPoints())));
}
}
@@ -622,7 +613,7 @@ public final class BlockCheckerEngine
return;
}
_isRedWinner = _redPoints > _bluePoints ? true : false;
_isRedWinner = _redPoints > _bluePoints;
if (_isRedWinner)
{
@@ -710,9 +701,7 @@ public final class BlockCheckerEngine
*/
private void rewardAsLooser(boolean isRed)
{
final Map<L2PcInstance, Integer> tempPoints = isRed ? _redTeamPoints : _blueTeamPoints;
for (Entry<L2PcInstance, Integer> entry : tempPoints.entrySet())
for (Entry<L2PcInstance, Integer> entry : (isRed ? _redTeamPoints : _blueTeamPoints).entrySet())
{
final L2PcInstance player = entry.getKey();
if ((player != null) && (entry.getValue() >= 10))
@@ -745,13 +734,11 @@ public final class BlockCheckerEngine
final PcInventory inv = player.getInventory();
if (inv.getItemByItemId(13787) != null)
{
final long count = inv.getInventoryItemCount(13787, 0);
inv.destroyItemByItemId("Handys Block Checker", 13787, count, player, player);
inv.destroyItemByItemId("Handys Block Checker", 13787, inv.getInventoryItemCount(13787, 0), player, player);
}
if (inv.getItemByItemId(13788) != null)
{
final long count = inv.getInventoryItemCount(13788, 0);
inv.destroyItemByItemId("Handys Block Checker", 13788, count, player, player);
inv.destroyItemByItemId("Handys Block Checker", 13788, inv.getInventoryItemCount(13788, 0), player, player);
}
broadcastRelationChanged(player);
// Teleport Back

View File

@@ -54,7 +54,6 @@ import com.l2jmobius.gameserver.model.actor.templates.L2NpcTemplate;
import com.l2jmobius.gameserver.model.holders.CastleSpawnHolder;
import com.l2jmobius.gameserver.model.itemcontainer.Inventory;
import com.l2jmobius.gameserver.model.skills.CommonSkill;
import com.l2jmobius.gameserver.model.skills.Skill;
import com.l2jmobius.gameserver.model.zone.type.L2CastleZone;
import com.l2jmobius.gameserver.model.zone.type.L2ResidenceTeleportZone;
import com.l2jmobius.gameserver.model.zone.type.L2SiegeZone;
@@ -163,14 +162,7 @@ public final class Castle extends AbstractResidence
return;
}
final long currentTime = System.currentTimeMillis();
if (_endDate > currentTime)
{
ThreadPoolManager.getInstance().scheduleGeneral(new FunctionTask(cwh), _endDate - currentTime);
}
else
{
ThreadPoolManager.getInstance().scheduleGeneral(new FunctionTask(cwh), 0);
}
ThreadPoolManager.getInstance().scheduleGeneral(new FunctionTask(cwh), _endDate > currentTime ? _endDate - currentTime : 0);
}
private class FunctionTask implements Runnable
@@ -191,12 +183,7 @@ public final class Castle extends AbstractResidence
}
if ((ClanTable.getInstance().getClan(getOwnerId()).getWarehouse().getAdena() >= _fee) || !_cwh)
{
int fee = _fee;
if (getEndTime() == -1)
{
fee = _tempFee;
}
final int fee = getEndTime() == -1 ? _tempFee : _fee;
setEndTime(System.currentTimeMillis() + getRate());
dbSave();
if (_cwh)
@@ -510,12 +497,9 @@ public final class Castle extends AbstractResidence
try
{
final L2PcInstance oldleader = oldOwner.getLeader().getPlayerInstance();
if (oldleader != null)
if ((oldleader != null) && (oldleader.getMountType() == MountType.WYVERN))
{
if (oldleader.getMountType() == MountType.WYVERN)
{
oldleader.dismount();
}
oldleader.dismount();
}
}
catch (Exception e)
@@ -709,17 +693,10 @@ public final class Castle extends AbstractResidence
public boolean updateFunctions(L2PcInstance player, int type, int lvl, int lease, long rate, boolean addNew)
{
if (player == null)
if ((player == null) || ((lease > 0) && !player.destroyItemByItemId("Consume", Inventory.ADENA_ID, lease, null, true)))
{
return false;
}
if (lease > 0)
{
if (!player.destroyItemByItemId("Consume", Inventory.ADENA_ID, lease, null, true))
{
return false;
}
}
if (addNew)
{
_function.put(type, new CastleFunction(type, lvl, lease, 0, rate, 0, false));
@@ -732,8 +709,7 @@ public final class Castle extends AbstractResidence
}
else
{
final int diffLease = lease - _function.get(type).getLease();
if (diffLease > 0)
if ((lease - _function.get(type).getLease()) > 0)
{
_function.remove(type);
_function.put(type, new CastleFunction(type, lvl, lease, 0, rate, -1, false));
@@ -988,11 +964,12 @@ public final class Castle extends AbstractResidence
public final void setShowNpcCrest(boolean showNpcCrest)
{
if (_showNpcCrest != showNpcCrest)
if (_showNpcCrest == showNpcCrest)
{
_showNpcCrest = showNpcCrest;
updateShowNpcCrest();
return;
}
_showNpcCrest = showNpcCrest;
updateShowNpcCrest();
}
public void updateClansReputation()
@@ -1149,8 +1126,7 @@ public final class Castle extends AbstractResidence
public void giveResidentialSkills(L2PcInstance player)
{
super.giveResidentialSkills(player);
final Skill skill = getSide() == CastleSide.DARK ? CommonSkill.ABILITY_OF_DARKNESS.getSkill() : CommonSkill.ABILITY_OF_LIGHT.getSkill();
player.addSkill(skill);
player.addSkill((getSide() == CastleSide.DARK ? CommonSkill.ABILITY_OF_DARKNESS.getSkill() : CommonSkill.ABILITY_OF_LIGHT.getSkill()));
}
@Override

View File

@@ -157,12 +157,7 @@ public abstract class ClanHall
}
if ((ClanTable.getInstance().getClan(getOwnerId()).getWarehouse().getAdena() >= _fee) || !_cwh)
{
int fee = _fee;
if (getEndTime() == -1)
{
fee = _tempFee;
}
final int fee = getEndTime() == -1 ? _tempFee : _fee;
setEndTime(System.currentTimeMillis() + getRate());
dbSave();
if (_cwh)
@@ -212,17 +207,19 @@ public abstract class ClanHall
_location = set.getString("location");
_functions = new ConcurrentHashMap<>();
if (_ownerId > 0)
if (_ownerId <= 0)
{
final L2Clan clan = ClanTable.getInstance().getClan(_ownerId);
if (clan != null)
{
clan.setHideoutId(getId());
}
else
{
free();
}
return;
}
final L2Clan clan = ClanTable.getInstance().getClan(_ownerId);
if (clan != null)
{
clan.setHideoutId(getId());
}
else
{
free();
}
}
@@ -483,18 +480,10 @@ public abstract class ClanHall
public boolean updateFunctions(L2PcInstance player, int type, int lvl, int lease, long rate, boolean addNew)
{
if (player == null)
if ((player == null) || ((lease > 0) && !player.destroyItemByItemId("Consume", Inventory.ADENA_ID, lease, null, true)))
{
return false;
}
if (lease > 0)
{
if (!player.destroyItemByItemId("Consume", Inventory.ADENA_ID, lease, null, true))
{
return false;
}
}
if (addNew)
{
_functions.put(type, new ClanHallFunction(type, lvl, lease, 0, rate, 0, false));
@@ -507,8 +496,7 @@ public abstract class ClanHall
}
else
{
final int diffLease = lease - _functions.get(type).getLease();
if (diffLease > 0)
if ((lease - _functions.get(type).getLease()) > 0)
{
_functions.remove(type);
_functions.put(type, new ClanHallFunction(type, lvl, lease, 0, rate, -1, false));

View File

@@ -79,18 +79,15 @@ public class Duel
public Duel(L2PcInstance playerA, L2PcInstance playerB, boolean partyDuel, int duelId)
{
_duelId = duelId;
_leaderA = playerA;
_leaderB = playerB;
if (partyDuel)
{
_leaderA = playerA;
_leaderB = playerB;
_teamA = new ArrayList<>(playerA.getParty().getMembers());
_teamB = new ArrayList<>(playerB.getParty().getMembers());
}
else
{
_leaderA = playerA;
_leaderB = playerB;
_teamA = new ArrayList<>();
_teamB = new ArrayList<>();
@@ -675,11 +672,7 @@ public class Duel
// got a duel surrender request?
if (_surrenderRequest != 0)
{
if (_surrenderRequest == 1)
{
return DuelResult.TEAM_1_SURRENDER;
}
return DuelResult.TEAM_2_SURRENDER;
return _surrenderRequest == 1 ? DuelResult.TEAM_1_SURRENDER : DuelResult.TEAM_2_SURRENDER;
}
// duel timed out
else if (getRemainingTime() <= 0)
@@ -795,8 +788,7 @@ public class Duel
}
if (teamdefeated)
{
final List<L2PcInstance> winners = (isInTeamA ? _teamB : _teamA);
for (L2PcInstance temp : winners)
for (L2PcInstance temp : isInTeamA ? _teamB : _teamA)
{
temp.setDuelState(DuelState.WINNER);
}

View File

@@ -192,12 +192,7 @@ public final class Fort extends AbstractResidence
}
if ((getOwnerClan().getWarehouse().getAdena() >= _fee) || !_cwh)
{
int fee = _fee;
if (getEndTime() == -1)
{
fee = _tempFee;
}
final int fee = getEndTime() == -1 ? _tempFee : _fee;
setEndTime(System.currentTimeMillis() + getRate());
dbSave();
if (_cwh)
@@ -391,12 +386,9 @@ public final class Fort extends AbstractResidence
try
{
final L2PcInstance oldleader = oldowner.getLeader().getPlayerInstance();
if (oldleader != null)
if ((oldleader != null) && (oldleader.getMountType() == MountType.WYVERN))
{
if (oldleader.getMountType() == MountType.WYVERN)
{
oldleader.dismount();
}
oldleader.dismount();
}
}
catch (Exception e)
@@ -448,23 +440,24 @@ public final class Fort extends AbstractResidence
public void removeOwner(boolean updateDB)
{
final L2Clan clan = getOwnerClan();
if (clan != null)
if (clan == null)
{
for (L2PcInstance member : clan.getOnlineMembers(0))
{
removeResidentialSkills(member);
member.sendSkillList();
}
clan.setFortId(0);
clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
setOwnerClan(null);
setSupplyLvL(0);
saveFortVariables();
removeAllFunctions();
if (updateDB)
{
updateOwnerInDB();
}
return;
}
for (L2PcInstance member : clan.getOnlineMembers(0))
{
removeResidentialSkills(member);
member.sendSkillList();
}
clan.setFortId(0);
clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
setOwnerClan(null);
setSupplyLvL(0);
saveFortVariables();
removeAllFunctions();
if (updateDB)
{
updateOwnerInDB();
}
}
@@ -546,13 +539,12 @@ public final class Fort extends AbstractResidence
public void upgradeDoor(int doorId, int hp, int pDef, int mDef)
{
final L2DoorInstance door = getDoor(doorId);
if (door != null)
if (door == null)
{
door.setCurrentHp(door.getMaxHp() + hp);
saveDoorUpgrade(doorId, hp, pDef, mDef);
return;
}
door.setCurrentHp(door.getMaxHp() + hp);
saveDoorUpgrade(doorId, hp, pDef, mDef);
}
// This method loads fort
@@ -675,12 +667,9 @@ public final class Fort extends AbstractResidence
{
return false;
}
if (lease > 0)
if ((lease > 0) && !player.destroyItemByItemId("Consume", Inventory.ADENA_ID, lease, null, true))
{
if (!player.destroyItemByItemId("Consume", Inventory.ADENA_ID, lease, null, true))
{
return false;
}
return false;
}
if (addNew)
{
@@ -694,8 +683,7 @@ public final class Fort extends AbstractResidence
}
else
{
final int diffLease = lease - _function.get(type).getLease();
if (diffLease > 0)
if ((lease - _function.get(type).getLease()) > 0)
{
_function.remove(type);
_function.put(type, new FortFunction(type, lvl, lease, 0, rate, -1, false));
@@ -824,8 +812,7 @@ public final class Fort extends AbstractResidence
if (clan != null)
{
clan.setFortId(getResidenceId()); // Set has fort flag for new owner
SystemMessage sm;
sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_VICTORIOUS_IN_THE_FORTRESS_BATTLE_OF_S2);
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_IS_VICTORIOUS_IN_THE_FORTRESS_BATTLE_OF_S2);
sm.addString(clan.getName());
sm.addCastleId(getResidenceId());
L2World.getInstance().getPlayers().forEach(p -> p.sendPacket(sm));
@@ -930,31 +917,17 @@ public final class Fort extends AbstractResidence
public final int getOwnedTime()
{
if (_lastOwnedTime.getTimeInMillis() == 0)
{
return 0;
}
return (int) ((System.currentTimeMillis() - _lastOwnedTime.getTimeInMillis()) / 1000);
return _lastOwnedTime.getTimeInMillis() == 0 ? 0 : (int) ((System.currentTimeMillis() - _lastOwnedTime.getTimeInMillis()) / 1000);
}
public final int getTimeTillRebelArmy()
{
if (_lastOwnedTime.getTimeInMillis() == 0)
{
return 0;
}
return (int) (((_lastOwnedTime.getTimeInMillis() + (Config.FS_MAX_OWN_TIME * 3600000L)) - System.currentTimeMillis()) / 1000L);
return _lastOwnedTime.getTimeInMillis() == 0 ? 0 : (int) (((_lastOwnedTime.getTimeInMillis() + (Config.FS_MAX_OWN_TIME * 3600000L)) - System.currentTimeMillis()) / 1000L);
}
public final long getTimeTillNextFortUpdate()
{
if (_FortUpdater[0] == null)
{
return 0;
}
return _FortUpdater[0].getDelay(TimeUnit.SECONDS);
return _FortUpdater[0] == null ? 0 : _FortUpdater[0].getDelay(TimeUnit.SECONDS);
}
public void updateClansReputation(L2Clan owner, boolean removePoints)

View File

@@ -248,56 +248,54 @@ public class FortSiege implements Siegable
@Override
public void endSiege()
{
if (isInProgress())
if (!isInProgress())
{
_isInProgress = false; // Flag so that siege instance can be started
removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
unSpawnFlags();
updatePlayerSiegeStateFlags(true);
int ownerId = -1;
if (getFort().getOwnerClan() != null)
{
ownerId = getFort().getOwnerClan().getId();
}
getFort().getZone().banishForeigners(ownerId);
getFort().getZone().setIsActive(false);
getFort().getZone().updateZoneStatusForCharactersInside();
getFort().getZone().setSiegeInstance(null);
saveFortSiege(); // Save fort specific data
clearSiegeClan(); // Clear siege clan from db
removeCommanders(); // Remove commander from this fort
getFort().spawnNpcCommanders(); // Spawn NPC commanders
getSiegeGuardManager().unspawnSiegeGuard(); // Remove all spawned siege guard from this fort
getFort().resetDoors(); // Respawn door to fort
ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleSuspiciousMerchantSpawn(), FortSiegeManager.getInstance().getSuspiciousMerchantRespawnDelay() * 60 * 1000L); // Prepare 3hr task for suspicious merchant respawn
setSiegeDateTime(true); // store suspicious merchant spawn in DB
if (_siegeEnd != null)
{
_siegeEnd.cancel(true);
_siegeEnd = null;
}
if (_siegeRestore != null)
{
_siegeRestore.cancel(true);
_siegeRestore = null;
}
if ((getFort().getOwnerClan() != null) && (getFort().getFlagPole().getMeshIndex() == 0))
{
getFort().setVisibleFlag(true);
}
_log.info("Siege of " + getFort().getName() + " fort finished.");
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeFinish(this), getFort());
return;
}
_isInProgress = false; // Flag so that siege instance can be started
removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
unSpawnFlags();
updatePlayerSiegeStateFlags(true);
final int ownerId = getFort().getOwnerClan() != null ? getFort().getOwnerClan().getId() : -1;
getFort().getZone().banishForeigners(ownerId);
getFort().getZone().setIsActive(false);
getFort().getZone().updateZoneStatusForCharactersInside();
getFort().getZone().setSiegeInstance(null);
saveFortSiege(); // Save fort specific data
clearSiegeClan(); // Clear siege clan from db
removeCommanders(); // Remove commander from this fort
getFort().spawnNpcCommanders(); // Spawn NPC commanders
getSiegeGuardManager().unspawnSiegeGuard(); // Remove all spawned siege guard from this fort
getFort().resetDoors(); // Respawn door to fort
ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleSuspiciousMerchantSpawn(), FortSiegeManager.getInstance().getSuspiciousMerchantRespawnDelay() * 60 * 1000L); // Prepare 3hr task for suspicious merchant respawn
setSiegeDateTime(true); // store suspicious merchant spawn in DB
if (_siegeEnd != null)
{
_siegeEnd.cancel(true);
_siegeEnd = null;
}
if (_siegeRestore != null)
{
_siegeRestore.cancel(true);
_siegeRestore = null;
}
if ((getFort().getOwnerClan() != null) && (getFort().getFlagPole().getMeshIndex() == 0))
{
getFort().setVisibleFlag(true);
}
_log.info("Siege of " + getFort().getName() + " fort finished.");
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeFinish(this), getFort());
}
/**
@@ -306,48 +304,50 @@ public class FortSiege implements Siegable
@Override
public void startSiege()
{
if (!isInProgress())
if (isInProgress())
{
if (_siegeStartTask != null) // used admin command "admin_startfortsiege"
{
_siegeStartTask.cancel(true);
getFort().despawnSuspiciousMerchant();
}
_siegeStartTask = null;
if (getAttackerClans().isEmpty())
{
return;
}
_isInProgress = true; // Flag so that same siege instance cannot be started again
loadSiegeClan(); // Load siege clan from db
updatePlayerSiegeStateFlags(false);
teleportPlayer(FortTeleportWhoType.Attacker, TeleportWhereType.TOWN); // Teleport to the closest town
getFort().despawnNpcCommanders(); // Despawn NPC commanders
spawnCommanders(); // Spawn commanders
getFort().resetDoors(); // Spawn door
spawnSiegeGuard(); // Spawn siege guard
getFort().setVisibleFlag(false);
getFort().getZone().setSiegeInstance(this);
getFort().getZone().setIsActive(true);
getFort().getZone().updateZoneStatusForCharactersInside();
// Schedule a task to prepare auto siege end
_siegeEnd = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(), FortSiegeManager.getInstance().getSiegeLength() * 60 * 1000L); // Prepare auto end task
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_FORTRESS_BATTLE_S1_HAS_BEGUN);
sm.addCastleId(getFort().getResidenceId());
announceToPlayer(sm);
saveFortSiege();
_log.info("Siege of " + getFort().getName() + " fort started.");
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeStart(this), getFort());
return;
}
if (_siegeStartTask != null) // used admin command "admin_startfortsiege"
{
_siegeStartTask.cancel(true);
getFort().despawnSuspiciousMerchant();
}
_siegeStartTask = null;
if (getAttackerClans().isEmpty())
{
return;
}
_isInProgress = true; // Flag so that same siege instance cannot be started again
loadSiegeClan(); // Load siege clan from db
updatePlayerSiegeStateFlags(false);
teleportPlayer(FortTeleportWhoType.Attacker, TeleportWhereType.TOWN); // Teleport to the closest town
getFort().despawnNpcCommanders(); // Despawn NPC commanders
spawnCommanders(); // Spawn commanders
getFort().resetDoors(); // Spawn door
spawnSiegeGuard(); // Spawn siege guard
getFort().setVisibleFlag(false);
getFort().getZone().setSiegeInstance(this);
getFort().getZone().setIsActive(true);
getFort().getZone().updateZoneStatusForCharactersInside();
// Schedule a task to prepare auto siege end
_siegeEnd = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleEndSiegeTask(), FortSiegeManager.getInstance().getSiegeLength() * 60 * 1000L); // Prepare auto end task
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_FORTRESS_BATTLE_S1_HAS_BEGUN);
sm.addCastleId(getFort().getResidenceId());
announceToPlayer(sm);
saveFortSiege();
_log.info("Siege of " + getFort().getName() + " fort started.");
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnFortSiegeStart(this), getFort());
}
/**
@@ -366,15 +366,16 @@ public class FortSiege implements Siegable
member.sendPacket(sm);
}
}
if (getFort().getOwnerClan() != null)
if (getFort().getOwnerClan() == null)
{
clan = ClanTable.getInstance().getClan(getFort().getOwnerClan().getId());
for (L2PcInstance member : clan.getOnlineMembers(0))
return;
}
clan = ClanTable.getInstance().getClan(getFort().getOwnerClan().getId());
for (L2PcInstance member : clan.getOnlineMembers(0))
{
if (member != null)
{
if (member != null)
{
member.sendPacket(sm);
}
member.sendPacket(sm);
}
}
}
@@ -413,35 +414,36 @@ public class FortSiege implements Siegable
member.broadcastUserInfo();
}
}
if (getFort().getOwnerClan() != null)
if (getFort().getOwnerClan() == null)
{
clan = ClanTable.getInstance().getClan(getFort().getOwnerClan().getId());
for (L2PcInstance member : clan.getOnlineMembers(0))
return;
}
clan = ClanTable.getInstance().getClan(getFort().getOwnerClan().getId());
for (L2PcInstance member : clan.getOnlineMembers(0))
{
if (member == null)
{
if (member == null)
{
continue;
}
if (clear)
{
member.setSiegeState((byte) 0);
member.setSiegeSide(0);
member.setIsInSiege(false);
member.stopFameTask();
}
else
{
member.setSiegeState((byte) 2);
member.setSiegeSide(getFort().getResidenceId());
if (checkIfInZone(member))
{
member.setIsInSiege(true);
member.startFameTask(Config.FORTRESS_ZONE_FAME_TASK_FREQUENCY * 1000, Config.FORTRESS_ZONE_FAME_AQUIRE_POINTS);
}
}
member.broadcastUserInfo();
continue;
}
if (clear)
{
member.setSiegeState((byte) 0);
member.setSiegeSide(0);
member.setIsInSiege(false);
member.stopFameTask();
}
else
{
member.setSiegeState((byte) 2);
member.setSiegeSide(getFort().getResidenceId());
if (checkIfInZone(member))
{
member.setIsInSiege(true);
member.startFameTask(Config.FORTRESS_ZONE_FAME_TASK_FREQUENCY * 1000, Config.FORTRESS_ZONE_FAME_AQUIRE_POINTS);
}
}
member.broadcastUserInfo();
}
}
@@ -482,12 +484,7 @@ public class FortSiege implements Siegable
@Override
public boolean checkIsDefender(L2Clan clan)
{
if ((clan != null) && (getFort().getOwnerClan() == clan))
{
return true;
}
return false;
return (clan != null) && (getFort().getOwnerClan() == clan);
}
/** Clear all registered siege clans from database for fort */
@@ -544,8 +541,7 @@ public class FortSiege implements Siegable
final List<L2PcInstance> players = new LinkedList<>();
for (L2SiegeClan siegeclan : getAttackerClans())
{
final L2Clan clan = ClanTable.getInstance().getClan(siegeclan.getClanId());
for (L2PcInstance player : clan.getOnlineMembers(0))
for (L2PcInstance player : ClanTable.getInstance().getClan(siegeclan.getClanId()).getOnlineMembers(0))
{
if (player.isInSiege())
{
@@ -596,85 +592,85 @@ public class FortSiege implements Siegable
*/
public void killedCommander(L2FortCommanderInstance instance)
{
if (!_commanders.isEmpty() && (getFort() != null))
if (_commanders.isEmpty() || (getFort() == null))
{
final L2Spawn spawn = instance.getSpawn();
if (spawn != null)
return;
}
final L2Spawn spawn = instance.getSpawn();
if (spawn != null)
{
final List<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getResidenceId());
for (FortSiegeSpawn spawn2 : commanders)
{
final List<FortSiegeSpawn> commanders = FortSiegeManager.getInstance().getCommanderSpawnList(getFort().getResidenceId());
for (FortSiegeSpawn spawn2 : commanders)
if (spawn2.getId() == spawn.getId())
{
if (spawn2.getId() == spawn.getId())
NpcStringId npcString = null;
switch (spawn2.getMessageId())
{
NpcStringId npcString = null;
switch (spawn2.getMessageId())
case 1:
{
case 1:
{
npcString = NpcStringId.YOU_MAY_HAVE_BROKEN_OUR_ARROWS_BUT_YOU_WILL_NEVER_BREAK_OUR_WILL_ARCHERS_RETREAT;
break;
}
case 2:
{
npcString = NpcStringId.AIIEEEE_COMMAND_CENTER_THIS_IS_GUARD_UNIT_WE_NEED_BACKUP_RIGHT_AWAY;
break;
}
case 3:
{
npcString = NpcStringId.AT_LAST_THE_MAGIC_CIRCLE_THAT_PROTECTS_THE_FORTRESS_HAS_WEAKENED_VOLUNTEERS_STAND_BACK;
break;
}
case 4:
{
npcString = NpcStringId.I_FEEL_SO_MUCH_GRIEF_THAT_I_CAN_T_EVEN_TAKE_CARE_OF_MYSELF_THERE_ISN_T_ANY_REASON_FOR_ME_TO_STAY_HERE_ANY_LONGER;
break;
}
npcString = NpcStringId.YOU_MAY_HAVE_BROKEN_OUR_ARROWS_BUT_YOU_WILL_NEVER_BREAK_OUR_WILL_ARCHERS_RETREAT;
break;
}
if (npcString != null)
case 2:
{
instance.broadcastPacket(new NpcSay(instance.getObjectId(), ChatType.NPC_SHOUT, instance.getId(), npcString));
npcString = NpcStringId.AIIEEEE_COMMAND_CENTER_THIS_IS_GUARD_UNIT_WE_NEED_BACKUP_RIGHT_AWAY;
break;
}
case 3:
{
npcString = NpcStringId.AT_LAST_THE_MAGIC_CIRCLE_THAT_PROTECTS_THE_FORTRESS_HAS_WEAKENED_VOLUNTEERS_STAND_BACK;
break;
}
case 4:
{
npcString = NpcStringId.I_FEEL_SO_MUCH_GRIEF_THAT_I_CAN_T_EVEN_TAKE_CARE_OF_MYSELF_THERE_ISN_T_ANY_REASON_FOR_ME_TO_STAY_HERE_ANY_LONGER;
break;
}
}
}
_commanders.remove(spawn);
if (_commanders.isEmpty())
{
// spawn fort flags
spawnFlag(getFort().getResidenceId());
// cancel door/commanders respawn
if (_siegeRestore != null)
if (npcString != null)
{
_siegeRestore.cancel(true);
instance.broadcastPacket(new NpcSay(instance.getObjectId(), ChatType.NPC_SHOUT, instance.getId(), npcString));
}
// open doors in main building
for (L2DoorInstance door : getFort().getDoors())
}
}
_commanders.remove(spawn);
if (_commanders.isEmpty())
{
// spawn fort flags
spawnFlag(getFort().getResidenceId());
// cancel door/commanders respawn
if (_siegeRestore != null)
{
_siegeRestore.cancel(true);
}
// open doors in main building
for (L2DoorInstance door : getFort().getDoors())
{
if (door.getIsShowHp())
{
if (door.getIsShowHp())
{
continue;
}
// TODO this also opens control room door at big fort
door.openMe();
continue;
}
getFort().getSiege().announceToPlayer(SystemMessage.getSystemMessage(SystemMessageId.ALL_BARRACKS_ARE_OCCUPIED));
}
// schedule restoring doors/commanders respawn
else if (_siegeRestore == null)
{
getFort().getSiege().announceToPlayer(SystemMessage.getSystemMessage(SystemMessageId.THE_BARRACKS_HAVE_BEEN_SEIZED));
_siegeRestore = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleSiegeRestore(), FortSiegeManager.getInstance().getCountDownLength() * 60 * 1000L);
}
else
{
getFort().getSiege().announceToPlayer(SystemMessage.getSystemMessage(SystemMessageId.THE_BARRACKS_HAVE_BEEN_SEIZED));
// TODO this also opens control room door at big fort
door.openMe();
}
getFort().getSiege().announceToPlayer(SystemMessage.getSystemMessage(SystemMessageId.ALL_BARRACKS_ARE_OCCUPIED));
}
else
{
_log.warning("FortSiege.killedCommander(): killed commander, but commander not registered for fortress. NpcId: " + instance.getId() + " FortId: " + getFort().getResidenceId());
getFort().getSiege().announceToPlayer(SystemMessage.getSystemMessage(SystemMessageId.THE_BARRACKS_HAVE_BEEN_SEIZED));
if (_siegeRestore == null)
{
_siegeRestore = ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleSiegeRestore(), FortSiegeManager.getInstance().getCountDownLength() * 60 * 1000L);
}
}
}
else
{
_log.warning("FortSiege.killedCommander(): killed commander, but commander not registered for fortress. NpcId: " + instance.getId() + " FortId: " + getFort().getResidenceId());
}
}
/**
@@ -724,12 +720,7 @@ public class FortSiege implements Siegable
for (Fort fort : FortManager.getInstance().getForts())
{
if (fort.getSiege().getAttackerClan(player.getClanId()) != null)
{
return 3; // Players clan is already registered to siege
}
if ((fort.getOwnerClan() == player.getClan()) && (fort.getSiege().isInProgress() || (fort.getSiege()._siegeStartTask != null)))
if ((fort.getSiege().getAttackerClan(player.getClanId()) != null) || ((fort.getOwnerClan() == player.getClan()) && (fort.getSiege().isInProgress() || (fort.getSiege()._siegeStartTask != null))))
{
return 3; // Players clan is already registered to siege
}
@@ -947,16 +938,9 @@ public class FortSiege implements Siegable
continue;
}
if (siege.getSiegeDate().get(Calendar.DAY_OF_WEEK) == getSiegeDate().get(Calendar.DAY_OF_WEEK))
if ((siege.getSiegeDate().get(Calendar.DAY_OF_WEEK) == getSiegeDate().get(Calendar.DAY_OF_WEEK)) && (siege.checkIsAttacker(clan) || siege.checkIsDefender(clan)))
{
if (siege.checkIsAttacker(clan))
{
return true;
}
if (siege.checkIsDefender(clan))
{
return true;
}
return true;
}
}
@@ -1003,22 +987,23 @@ public class FortSiege implements Siegable
/** Remove commanders. */
private void removeCommanders()
{
if ((_commanders != null) && !_commanders.isEmpty())
if ((_commanders == null) || _commanders.isEmpty())
{
// Remove all instance of commanders for this fort
for (L2Spawn spawn : _commanders)
return;
}
// Remove all instance of commanders for this fort
for (L2Spawn spawn : _commanders)
{
if (spawn != null)
{
if (spawn != null)
spawn.stopRespawn();
if (spawn.getLastSpawn() != null)
{
spawn.stopRespawn();
if (spawn.getLastSpawn() != null)
{
spawn.getLastSpawn().deleteMe();
}
spawn.getLastSpawn().deleteMe();
}
}
_commanders.clear();
}
_commanders.clear();
}
/** Remove all flags. */
@@ -1142,12 +1127,7 @@ public class FortSiege implements Siegable
@Override
public final L2SiegeClan getAttackerClan(L2Clan clan)
{
if (clan == null)
{
return null;
}
return getAttackerClan(clan.getId());
return clan == null ? null : getAttackerClan(clan.getId());
}
@Override

View File

@@ -194,10 +194,7 @@ public class Hero
{
final String format = String.format("%%0%dd", 2);
FightTime = FightTime / 1000;
final String seconds = String.format(format, FightTime % 60);
final String minutes = String.format(format, (FightTime % 3600) / 60);
final String time = minutes + ":" + seconds;
return time;
return String.format(format, (FightTime % 3600) / 60) + ":" + String.format(format, FightTime % 60);
}
/**
@@ -791,16 +788,17 @@ public class Hero
final L2NpcTemplate template = NpcData.getInstance().getTemplate(npcId);
final List<StatsSet> list = HERO_DIARY.get(charId);
if ((list != null) && (template != null))
if ((list == null) || (template == null))
{
// Prepare new data
final StatsSet diaryEntry = new StatsSet();
final String date = (new SimpleDateFormat("yyyy-MM-dd HH")).format(new Date(System.currentTimeMillis()));
diaryEntry.set("date", date);
diaryEntry.set("action", template.getName() + " was defeated");
// Add to old list
list.add(diaryEntry);
return;
}
// Prepare new data
final StatsSet diaryEntry = new StatsSet();
final String date = (new SimpleDateFormat("yyyy-MM-dd HH")).format(new Date(System.currentTimeMillis()));
diaryEntry.set("date", date);
diaryEntry.set("action", template.getName() + " was defeated");
// Add to old list
list.add(diaryEntry);
}
public void setCastleTaken(int charId, int castleId)
@@ -809,16 +807,17 @@ public class Hero
final Castle castle = CastleManager.getInstance().getCastleById(castleId);
final List<StatsSet> list = HERO_DIARY.get(charId);
if ((list != null) && (castle != null))
if ((list == null) || (castle == null))
{
// Prepare new data
final StatsSet diaryEntry = new StatsSet();
final String date = (new SimpleDateFormat("yyyy-MM-dd HH")).format(new Date(System.currentTimeMillis()));
diaryEntry.set("date", date);
diaryEntry.set("action", castle.getName() + " Castle was successfuly taken");
// Add to old list
list.add(diaryEntry);
return;
}
// Prepare new data
final StatsSet diaryEntry = new StatsSet();
final String date = (new SimpleDateFormat("yyyy-MM-dd HH")).format(new Date(System.currentTimeMillis()));
diaryEntry.set("date", date);
diaryEntry.set("action", castle.getName() + " Castle was successfuly taken");
// Add to old list
list.add(diaryEntry);
}
public void setDiaryData(int charId, int action, int param)

View File

@@ -236,11 +236,12 @@ public final class Instance
public void removePlayer(Integer objectId)
{
_players.remove(objectId);
if (_players.isEmpty() && (_emptyDestroyTime >= 0))
if (!_players.isEmpty() || (_emptyDestroyTime < 0))
{
_lastLeft = System.currentTimeMillis();
setDuration((int) (_instanceEndTime - System.currentTimeMillis() - 500));
return;
}
_lastLeft = System.currentTimeMillis();
setDuration((int) (_instanceEndTime - System.currentTimeMillis() - 500));
}
public void addNpc(L2Npc npc)
@@ -490,8 +491,7 @@ public final class Instance
{
_allowRandomWalk = Boolean.parseBoolean(a.getNodeValue());
}
final Node first = n.getFirstChild();
for (n = first; n != null; n = n.getNextSibling())
for (n = n.getFirstChild(); n != null; n = n.getNextSibling())
{
switch (n.getNodeName().toLowerCase())
{
@@ -566,9 +566,7 @@ public final class Instance
if ("set".equalsIgnoreCase(bean.getNodeName()))
{
final NamedNodeMap attrs = bean.getAttributes();
final String setname = attrs.getNamedItem("name").getNodeValue();
final String value = attrs.getNamedItem("val").getNodeValue();
set.set(setname, value);
set.set(attrs.getNamedItem("name").getNodeValue(), attrs.getNamedItem("val").getNodeValue());
}
}
addDoor(doorId, set);
@@ -688,10 +686,7 @@ public final class Instance
{
try
{
final int x = Integer.parseInt(loc.getAttributes().getNamedItem("x").getNodeValue());
final int y = Integer.parseInt(loc.getAttributes().getNamedItem("y").getNodeValue());
final int z = Integer.parseInt(loc.getAttributes().getNamedItem("z").getNodeValue());
_enterLocations.add(new Location(x, y, z));
_enterLocations.add(new Location(Integer.parseInt(loc.getAttributes().getNamedItem("x").getNodeValue()), Integer.parseInt(loc.getAttributes().getNamedItem("y").getNodeValue()), Integer.parseInt(loc.getAttributes().getNamedItem("z").getNodeValue())));
}
catch (Exception e)
{

View File

@@ -109,15 +109,7 @@ public class L2Event
}
sortByValue(tmp);
// If the map size is less than "n", n will be as much as the map size
if (tmp.size() <= n)
{
return new ArrayList<>(tmp.keySet());
}
final List<L2PcInstance> toReturn = new ArrayList<>(tmp.keySet());
return toReturn.subList(1, n);
return tmp.size() <= n ? new ArrayList<>(tmp.keySet()) : (new ArrayList<>(tmp.keySet())).subList(1, n);
}
public static void showEventHtml(L2PcInstance player, String objectid)

View File

@@ -85,13 +85,14 @@ public class Message
_itemId = rset.getInt("itemId");
_enchantLvl = rset.getInt("enchantLvl");
final String elemental = rset.getString("elementals");
if (elemental != null)
if (elemental == null)
{
final String[] elemDef = elemental.split(";");
for (int i = 0; i < 6; i++)
{
_elementals[i] = Integer.parseInt(elemDef[i]);
}
return;
}
final String[] elemDef = elemental.split(";");
for (int i = 0; i < 6; i++)
{
_elementals[i] = Integer.parseInt(elemDef[i]);
}
}
@@ -209,8 +210,7 @@ public class Message
}
else if (mailType == MailType.COMMISSION_ITEM_RETURNED)
{
final Mail attachement = createAttachments();
attachement.addItem("CommissionReturnItem", item, null, null);
createAttachments().addItem("CommissionReturnItem", item, null, null);
}
}
@@ -325,11 +325,12 @@ public class Message
public final void markAsRead()
{
if (_unread)
if (!_unread)
{
_unread = false;
MailManager.getInstance().markAsReadInDb(_messageId);
return;
}
_unread = false;
MailManager.getInstance().markAsReadInDb(_messageId);
}
public final boolean isDeletedBySender()
@@ -339,17 +340,18 @@ public class Message
public final void setDeletedBySender()
{
if (!_deletedBySender)
if (_deletedBySender)
{
_deletedBySender = true;
if (_deletedByReceiver)
{
MailManager.getInstance().deleteMessageInDb(_messageId);
}
else
{
MailManager.getInstance().markAsDeletedBySenderInDb(_messageId);
}
return;
}
_deletedBySender = true;
if (_deletedByReceiver)
{
MailManager.getInstance().deleteMessageInDb(_messageId);
}
else
{
MailManager.getInstance().markAsDeletedBySenderInDb(_messageId);
}
}
@@ -360,17 +362,18 @@ public class Message
public final void setDeletedByReceiver()
{
if (!_deletedByReceiver)
if (_deletedByReceiver)
{
_deletedByReceiver = true;
if (_deletedBySender)
{
MailManager.getInstance().deleteMessageInDb(_messageId);
}
else
{
MailManager.getInstance().markAsDeletedByReceiverInDb(_messageId);
}
return;
}
_deletedByReceiver = true;
if (_deletedBySender)
{
MailManager.getInstance().deleteMessageInDb(_messageId);
}
else
{
MailManager.getInstance().markAsDeletedByReceiverInDb(_messageId);
}
}
@@ -432,15 +435,16 @@ public class Message
public final synchronized void removeAttachments()
{
if (_attachments != null)
if (_attachments == null)
{
_attachments = null;
_hasAttachments = false;
MailManager.getInstance().removeAttachmentsInDb(_messageId);
if (_unloadTask != null)
{
_unloadTask.cancel(false);
}
return;
}
_attachments = null;
_hasAttachments = false;
MailManager.getInstance().removeAttachmentsInDb(_messageId);
if (_unloadTask != null)
{
_unloadTask.cancel(false);
}
}
@@ -459,11 +463,12 @@ public class Message
protected final synchronized void unloadAttachments()
{
if (_attachments != null)
if (_attachments == null)
{
_attachments.deleteMe();
_attachments = null;
return;
}
_attachments.deleteMe();
_attachments = null;
}
static class AttachmentsUnloadTask implements Runnable
@@ -478,11 +483,12 @@ public class Message
@Override
public void run()
{
if (_msg != null)
if (_msg == null)
{
_msg.unloadAttachments();
_msg = null;
return;
}
_msg.unloadAttachments();
_msg = null;
}
}
}

View File

@@ -21,7 +21,6 @@ import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
@@ -246,103 +245,105 @@ public class Siege implements Siegable
@Override
public void endSiege()
{
if (isInProgress())
if (!isInProgress())
{
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_S1_SIEGE_HAS_FINISHED);
return;
}
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.THE_S1_SIEGE_HAS_FINISHED);
sm.addCastleId(getCastle().getResidenceId());
Broadcast.toAllOnlinePlayers(sm);
if (getCastle().getOwnerId() > 0)
{
final L2Clan clan = ClanTable.getInstance().getClan(getCastle().getOwnerId());
sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_S1_IS_VICTORIOUS_OVER_S2_S_CASTLE_SIEGE);
sm.addString(clan.getName());
sm.addCastleId(getCastle().getResidenceId());
Broadcast.toAllOnlinePlayers(sm);
if (getCastle().getOwnerId() > 0)
if (clan.getId() == _firstOwnerClanId)
{
final L2Clan clan = ClanTable.getInstance().getClan(getCastle().getOwnerId());
sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_S1_IS_VICTORIOUS_OVER_S2_S_CASTLE_SIEGE);
sm.addString(clan.getName());
sm.addCastleId(getCastle().getResidenceId());
Broadcast.toAllOnlinePlayers(sm);
if (clan.getId() == _firstOwnerClanId)
// Owner is unchanged
clan.increaseBloodAllianceCount();
}
else
{
getCastle().setTicketBuyCount(0);
for (L2ClanMember member : clan.getMembers())
{
// Owner is unchanged
clan.increaseBloodAllianceCount();
}
else
{
getCastle().setTicketBuyCount(0);
for (L2ClanMember member : clan.getMembers())
if (member != null)
{
if (member != null)
final L2PcInstance player = member.getPlayerInstance();
if ((player != null) && player.isNoble())
{
final L2PcInstance player = member.getPlayerInstance();
if ((player != null) && player.isNoble())
{
Hero.getInstance().setCastleTaken(player.getObjectId(), getCastle().getResidenceId());
}
Hero.getInstance().setCastleTaken(player.getObjectId(), getCastle().getResidenceId());
}
}
}
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SIEGE_OF_S1_HAS_ENDED_IN_A_DRAW);
sm.addCastleId(getCastle().getResidenceId());
Broadcast.toAllOnlinePlayers(sm);
}
for (L2SiegeClan attackerClan : getAttackerClans())
{
final L2Clan clan = ClanTable.getInstance().getClan(attackerClan.getClanId());
if (clan == null)
{
continue;
}
for (L2PcInstance member : clan.getOnlineMembers(0))
{
member.checkItemRestriction();
}
clan.clearSiegeKills();
clan.clearSiegeDeaths();
}
for (L2SiegeClan defenderClan : getDefenderClans())
{
final L2Clan clan = ClanTable.getInstance().getClan(defenderClan.getClanId());
if (clan == null)
{
continue;
}
for (L2PcInstance member : clan.getOnlineMembers(0))
{
member.checkItemRestriction();
}
clan.clearSiegeKills();
clan.clearSiegeDeaths();
}
getCastle().updateClansReputation();
removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
teleportPlayer(SiegeTeleportWhoType.NotOwner, TeleportWhereType.TOWN); // Teleport to the second closest town
_isInProgress = false; // Flag so that siege instance can be started
updatePlayerSiegeStateFlags(true);
saveCastleSiege(); // Save castle specific data
clearSiegeClan(); // Clear siege clan from db
removeTowers(); // Remove all towers from this castle
_siegeGuardManager.unspawnSiegeGuard(); // Remove all spawned siege guard from this castle
if (getCastle().getOwnerId() > 0)
{
_siegeGuardManager.removeMercs();
}
getCastle().spawnDoor(); // Respawn door to castle
getCastle().getZone().setIsActive(false);
getCastle().getZone().updateZoneStatusForCharactersInside();
getCastle().getZone().setSiegeInstance(null);
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), getCastle());
}
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.THE_SIEGE_OF_S1_HAS_ENDED_IN_A_DRAW);
sm.addCastleId(getCastle().getResidenceId());
Broadcast.toAllOnlinePlayers(sm);
}
for (L2SiegeClan attackerClan : getAttackerClans())
{
final L2Clan clan = ClanTable.getInstance().getClan(attackerClan.getClanId());
if (clan == null)
{
continue;
}
for (L2PcInstance member : clan.getOnlineMembers(0))
{
member.checkItemRestriction();
}
clan.clearSiegeKills();
clan.clearSiegeDeaths();
}
for (L2SiegeClan defenderClan : getDefenderClans())
{
final L2Clan clan = ClanTable.getInstance().getClan(defenderClan.getClanId());
if (clan == null)
{
continue;
}
for (L2PcInstance member : clan.getOnlineMembers(0))
{
member.checkItemRestriction();
}
clan.clearSiegeKills();
clan.clearSiegeDeaths();
}
getCastle().updateClansReputation();
removeFlags(); // Removes all flags. Note: Remove flag before teleporting players
teleportPlayer(SiegeTeleportWhoType.NotOwner, TeleportWhereType.TOWN); // Teleport to the second closest town
_isInProgress = false; // Flag so that siege instance can be started
updatePlayerSiegeStateFlags(true);
saveCastleSiege(); // Save castle specific data
clearSiegeClan(); // Clear siege clan from db
removeTowers(); // Remove all towers from this castle
_siegeGuardManager.unspawnSiegeGuard(); // Remove all spawned siege guard from this castle
if (getCastle().getOwnerId() > 0)
{
_siegeGuardManager.removeMercs();
}
getCastle().spawnDoor(); // Respawn door to castle
getCastle().getZone().setIsActive(false);
getCastle().getZone().updateZoneStatusForCharactersInside();
getCastle().getZone().setSiegeInstance(null);
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeFinish(this), getCastle());
}
private void removeDefender(L2SiegeClan sc)
@@ -387,93 +388,87 @@ public class Siege implements Siegable
*/
public void midVictory()
{
if (isInProgress()) // Siege still in progress
if (!isInProgress())
{
return;
}
if (getCastle().getOwnerId() > 0)
{
_siegeGuardManager.removeMercs(); // Remove all merc entry from db
}
if (getDefenderClans().isEmpty() && (getAttackerClans().size() == 1))
{
final L2SiegeClan sc_newowner = getAttackerClan(getCastle().getOwnerId());
removeAttacker(sc_newowner);
addDefender(sc_newowner, SiegeClanType.OWNER);
endSiege();
return;
}
if (getCastle().getOwnerId() <= 0)
{
return;
}
final int allyId = ClanTable.getInstance().getClan(getCastle().getOwnerId()).getAllyId();
if (getDefenderClans().isEmpty() && (allyId != 0))
{
if (getCastle().getOwnerId() > 0)
{
_siegeGuardManager.removeMercs(); // Remove all merc entry from db
}
if (getDefenderClans().isEmpty() && // If defender doesn't exist (Pc vs Npc)
(getAttackerClans().size() == 1 // Only 1 attacker
))
{
final L2SiegeClan sc_newowner = getAttackerClan(getCastle().getOwnerId());
removeAttacker(sc_newowner);
addDefender(sc_newowner, SiegeClanType.OWNER);
endSiege();
return;
}
if (getCastle().getOwnerId() > 0)
{
final int allyId = ClanTable.getInstance().getClan(getCastle().getOwnerId()).getAllyId();
if (getDefenderClans().isEmpty()) // If defender doesn't exist (Pc vs Npc)
// and only an alliance attacks
boolean allinsamealliance = true;
for (L2SiegeClan sc : getAttackerClans())
{
// The player's clan is in an alliance
if (allyId != 0)
if ((sc != null) && (ClanTable.getInstance().getClan(sc.getClanId()).getAllyId() != allyId))
{
boolean allinsamealliance = true;
for (L2SiegeClan sc : getAttackerClans())
{
if (sc != null)
{
if (ClanTable.getInstance().getClan(sc.getClanId()).getAllyId() != allyId)
{
allinsamealliance = false;
}
}
}
if (allinsamealliance)
{
final L2SiegeClan sc_newowner = getAttackerClan(getCastle().getOwnerId());
removeAttacker(sc_newowner);
addDefender(sc_newowner, SiegeClanType.OWNER);
endSiege();
return;
}
allinsamealliance = false;
}
}
for (L2SiegeClan sc : getDefenderClans())
if (allinsamealliance)
{
if (sc != null)
{
removeDefender(sc);
addAttacker(sc);
}
final L2SiegeClan sc_newowner = getAttackerClan(getCastle().getOwnerId());
removeAttacker(sc_newowner);
addDefender(sc_newowner, SiegeClanType.OWNER);
endSiege();
return;
}
final L2SiegeClan sc_newowner = getAttackerClan(getCastle().getOwnerId());
removeAttacker(sc_newowner);
addDefender(sc_newowner, SiegeClanType.OWNER);
// The player's clan is in an alliance
for (L2Clan clan : ClanTable.getInstance().getClanAllies(allyId))
{
final L2SiegeClan sc = getAttackerClan(clan.getId());
if (sc != null)
{
removeAttacker(sc);
addDefender(sc, SiegeClanType.DEFENDER);
}
}
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
removeDefenderFlags(); // Removes defenders' flags
getCastle().removeUpgrade(); // Remove all castle upgrade
getCastle().spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
removeTowers(); // Remove all towers from this castle
_controlTowerCount = 0; // Each new siege midvictory CT are completely respawned.
spawnControlTower();
spawnFlameTower();
updatePlayerSiegeStateFlags(false);
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), getCastle());
}
}
for (L2SiegeClan sc : getDefenderClans())
{
if (sc != null)
{
removeDefender(sc);
addAttacker(sc);
}
}
final L2SiegeClan sc_newowner = getAttackerClan(getCastle().getOwnerId());
removeAttacker(sc_newowner);
addDefender(sc_newowner, SiegeClanType.OWNER);
// The player's clan is in an alliance
for (L2Clan clan : ClanTable.getInstance().getClanAllies(allyId))
{
final L2SiegeClan sc = getAttackerClan(clan.getId());
if (sc != null)
{
removeAttacker(sc);
addDefender(sc, SiegeClanType.DEFENDER);
}
}
teleportPlayer(SiegeTeleportWhoType.Attacker, TeleportWhereType.SIEGEFLAG); // Teleport to the second closest town
teleportPlayer(SiegeTeleportWhoType.Spectator, TeleportWhereType.TOWN); // Teleport to the second closest town
removeDefenderFlags(); // Removes defenders' flags
getCastle().removeUpgrade(); // Remove all castle upgrade
getCastle().spawnDoor(true); // Respawn door to castle but make them weaker (50% hp)
removeTowers(); // Remove all towers from this castle
_controlTowerCount = 0; // Each new siege midvictory CT are completely respawned.
spawnControlTower();
spawnFlameTower();
updatePlayerSiegeStateFlags(false);
// Notify to scripts.
EventDispatcher.getInstance().notifyEventAsync(new OnCastleSiegeOwnerChange(this), getCastle());
}
/**
@@ -497,8 +492,7 @@ public class Siege implements Siegable
else
{
sm = SystemMessage.getSystemMessage(SystemMessageId.S1_S_SIEGE_WAS_CANCELED_BECAUSE_THERE_WERE_NO_CLANS_THAT_PARTICIPATED);
final L2Clan ownerClan = ClanTable.getInstance().getClan(_firstOwnerClanId);
ownerClan.increaseBloodAllianceCount();
ClanTable.getInstance().getClan(_firstOwnerClanId).increaseBloodAllianceCount();
}
sm.addCastleId(getCastle().getResidenceId());
Broadcast.toAllOnlinePlayers(sm);
@@ -546,8 +540,7 @@ public class Siege implements Siegable
{
for (L2SiegeClan siegeClans : getDefenderClans())
{
final L2Clan clan = ClanTable.getInstance().getClan(siegeClans.getClanId());
for (L2PcInstance member : clan.getOnlineMembers(0))
for (L2PcInstance member : ClanTable.getInstance().getClan(siegeClans.getClanId()).getOnlineMembers(0))
{
member.sendPacket(message);
}
@@ -557,8 +550,7 @@ public class Siege implements Siegable
{
for (L2SiegeClan siegeClans : getAttackerClans())
{
final L2Clan clan = ClanTable.getInstance().getClan(siegeClans.getClanId());
for (L2PcInstance member : clan.getOnlineMembers(0))
for (L2PcInstance member : ClanTable.getInstance().getClan(siegeClans.getClanId()).getOnlineMembers(0))
{
if (member != null)
{
@@ -600,9 +592,7 @@ public class Siege implements Siegable
}
}
member.sendPacket(new UserInfo(member));
final Collection<L2PcInstance> plrs = member.getKnownList().getKnownPlayers().values();
for (L2PcInstance player : plrs)
for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
{
if ((player == null) || !member.isVisibleFor(player))
{
@@ -667,15 +657,12 @@ public class Siege implements Siegable
}
member.sendPacket(new UserInfo(member));
final Collection<L2PcInstance> plrs = member.getKnownList().getKnownPlayers().values();
for (L2PcInstance player : plrs)
for (L2PcInstance player : member.getKnownList().getKnownPlayers().values())
{
if ((player == null) || !member.isVisibleFor(player))
{
continue;
}
final int relation = member.getRelation(player);
final Integer oldrelation = member.getKnownList().getKnownRelations().get(player.getObjectId());
if ((oldrelation == null) || (oldrelation != relation))
@@ -945,18 +932,11 @@ public class Siege implements Siegable
{
return;
}
int allyId = 0;
if (getCastle().getOwnerId() != 0)
final int allyId = getCastle().getOwnerId() != 0 ? ClanTable.getInstance().getClan(getCastle().getOwnerId()).getAllyId() : 0;
if ((allyId != 0) && (player.getClan().getAllyId() == allyId) && !force)
{
allyId = ClanTable.getInstance().getClan(getCastle().getOwnerId()).getAllyId();
}
if (allyId != 0)
{
if ((player.getClan().getAllyId() == allyId) && !force)
{
player.sendPacket(SystemMessageId.YOU_CANNOT_REGISTER_AS_AN_ATTACKER_BECAUSE_YOU_ARE_IN_AN_ALLIANCE_WITH_THE_CASTLE_OWNING_CLAN);
return;
}
player.sendPacket(SystemMessageId.YOU_CANNOT_REGISTER_AS_AN_ATTACKER_BECAUSE_YOU_ARE_IN_AN_ALLIANCE_WITH_THE_CASTLE_OWNING_CLAN);
return;
}
if (force)
@@ -1611,11 +1591,7 @@ public class Siege implements Siegable
@Override
public final L2SiegeClan getAttackerClan(L2Clan clan)
{
if (clan == null)
{
return null;
}
return getAttackerClan(clan.getId());
return clan == null ? null : getAttackerClan(clan.getId());
}
@Override
@@ -1634,11 +1610,7 @@ public class Siege implements Siegable
@Override
public final List<L2SiegeClan> getAttackerClans()
{
if (_isNormalSide)
{
return _attackerClans;
}
return _defenderClans;
return _isNormalSide ? _attackerClans : _defenderClans;
}
public final int getAttackerRespawnDelay()
@@ -1648,21 +1620,13 @@ public class Siege implements Siegable
public final Castle getCastle()
{
if (_castle == null)
{
return null;
}
return _castle;
return _castle == null ? null : _castle;
}
@Override
public final L2SiegeClan getDefenderClan(L2Clan clan)
{
if (clan == null)
{
return null;
}
return getDefenderClan(clan.getId());
return clan == null ? null : getDefenderClan(clan.getId());
}
@Override
@@ -1681,20 +1645,12 @@ public class Siege implements Siegable
@Override
public final List<L2SiegeClan> getDefenderClans()
{
if (_isNormalSide)
{
return _defenderClans;
}
return _attackerClans;
return _isNormalSide ? _defenderClans : _attackerClans;
}
public final L2SiegeClan getDefenderWaitingClan(L2Clan clan)
{
if (clan == null)
{
return null;
}
return getDefenderWaitingClan(clan.getId());
return clan == null ? null : getDefenderWaitingClan(clan.getId());
}
public final L2SiegeClan getDefenderWaitingClan(int clanId)

View File

@@ -672,12 +672,9 @@ public class TvTEvent
*/
public static void onLogout(L2PcInstance playerInstance)
{
if ((playerInstance != null) && (isStarting() || isStarted() || isParticipating()))
if ((playerInstance != null) && (isStarting() || isStarted() || isParticipating()) && removeParticipant(playerInstance.getObjectId()))
{
if (removeParticipant(playerInstance.getObjectId()))
{
playerInstance.setXYZInvisible((Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[0] + Rnd.get(101)) - 50, (Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[1] + Rnd.get(101)) - 50, Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[2]);
}
playerInstance.setXYZInvisible((Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[0] + Rnd.get(101)) - 50, (Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[1] + Rnd.get(101)) - 50, Config.TVT_EVENT_PARTICIPATION_NPC_COORDINATES[2]);
}
}
@@ -937,12 +934,9 @@ public class TvTEvent
return false;
}
// players in the different teams ?
if (getParticipantTeamId(sourcePlayerId) != getParticipantTeamId(targetPlayerId))
if ((getParticipantTeamId(sourcePlayerId) != getParticipantTeamId(targetPlayerId)) && !skill.isBad())
{
if (!skill.isBad())
{
return false;
}
return false;
}
return true;
}
@@ -1109,12 +1103,7 @@ public class TvTEvent
*/
public static boolean isPlayerParticipant(int playerObjectId)
{
if (!isParticipating() && !isStarting() && !isStarted())
{
return false;
}
return _teams[0].containsPlayer(playerObjectId) || _teams[1].containsPlayer(playerObjectId);
return (isParticipating() || isStarting() || isStarted()) && (_teams[0].containsPlayer(playerObjectId) || _teams[1].containsPlayer(playerObjectId));
}
/**
@@ -1124,12 +1113,7 @@ public class TvTEvent
*/
public static int getParticipatedPlayersCount()
{
if (!isParticipating() && !isStarting() && !isStarted())
{
return 0;
}
return _teams[0].getParticipatedPlayerCount() + _teams[1].getParticipatedPlayerCount();
return !isParticipating() && !isStarting() && !isStarted() ? 0 : _teams[0].getParticipatedPlayerCount() + _teams[1].getParticipatedPlayerCount();
}
/**

View File

@@ -46,9 +46,7 @@ public class TvTEventTeleporter implements Runnable
_coordinates = coordinates;
_adminRemove = adminRemove;
final long delay = (TvTEvent.isStarted() ? Config.TVT_EVENT_RESPAWN_TELEPORT_DELAY : Config.TVT_EVENT_START_LEAVE_TELEPORT_DELAY) * 1000;
ThreadPoolManager.getInstance().scheduleGeneral(this, fastSchedule ? 0 : delay);
ThreadPoolManager.getInstance().scheduleGeneral(this, fastSchedule ? 0 : (TvTEvent.isStarted() ? Config.TVT_EVENT_RESPAWN_TELEPORT_DELAY : Config.TVT_EVENT_START_LEAVE_TELEPORT_DELAY) * 1000);
}
/**

View File

@@ -100,8 +100,7 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
while (rset.next())
{
final int id = rset.getInt("attacker_id");
final L2SiegeClan clan = new L2SiegeClan(id, SiegeClanType.ATTACKER);
_attackers.put(id, clan);
_attackers.put(id, (new L2SiegeClan(id, SiegeClanType.ATTACKER)));
}
}
}
@@ -142,32 +141,33 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
public final void loadGuards()
{
if (_guards == null)
if (_guards != null)
{
_guards = new ArrayList<>();
try (Connection con = DatabaseFactory.getInstance().getConnection();
PreparedStatement ps = con.prepareStatement(SQL_LOAD_GUARDS))
return;
}
_guards = new ArrayList<>();
try (Connection con = DatabaseFactory.getInstance().getConnection();
PreparedStatement ps = con.prepareStatement(SQL_LOAD_GUARDS))
{
ps.setInt(1, _hall.getId());
try (ResultSet rset = ps.executeQuery())
{
ps.setInt(1, _hall.getId());
try (ResultSet rset = ps.executeQuery())
while (rset.next())
{
while (rset.next())
{
final L2Spawn spawn = new L2Spawn(rset.getInt("npcId"));
spawn.setX(rset.getInt("x"));
spawn.setY(rset.getInt("y"));
spawn.setZ(rset.getInt("z"));
spawn.setHeading(rset.getInt("heading"));
spawn.setRespawnDelay(rset.getInt("respawnDelay"));
spawn.setAmount(1);
_guards.add(spawn);
}
final L2Spawn spawn = new L2Spawn(rset.getInt("npcId"));
spawn.setX(rset.getInt("x"));
spawn.setY(rset.getInt("y"));
spawn.setZ(rset.getInt("z"));
spawn.setHeading(rset.getInt("heading"));
spawn.setRespawnDelay(rset.getInt("respawnDelay"));
spawn.setAmount(1);
_guards.add(spawn);
}
}
catch (Exception e)
{
_log.warning(getName() + ": Couldnt load siege guards!");
}
}
catch (Exception e)
{
_log.warning(getName() + ": Couldnt load siege guards!");
}
}
@@ -214,12 +214,7 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
@Override
public boolean checkIsAttacker(L2Clan clan)
{
if (clan == null)
{
return false;
}
return _attackers.containsKey(clan.getId());
return (clan != null) && _attackers.containsKey(clan.getId());
}
@Override
@@ -355,15 +350,13 @@ public abstract class ClanHallSiegeEngine extends Quest implements Siegable
winner.setHideoutId(_hall.getId());
finalMsg = SystemMessage.getSystemMessage(SystemMessageId.CLAN_S1_IS_VICTORIOUS_OVER_S2_S_CASTLE_SIEGE);
finalMsg.addString(winner.getName());
finalMsg.addString(_hall.getName());
Broadcast.toAllOnlinePlayers(finalMsg);
}
else
{
finalMsg = SystemMessage.getSystemMessage(SystemMessageId.THE_SIEGE_OF_S1_HAS_ENDED_IN_A_DRAW);
finalMsg.addString(_hall.getName());
Broadcast.toAllOnlinePlayers(finalMsg);
}
Broadcast.toAllOnlinePlayers(finalMsg);
finalMsg.addString(_hall.getName());
_missionAccomplished = false;
_hall.updateSiegeZone(false);

View File

@@ -211,12 +211,7 @@ public final class SiegableHall extends ClanHall
public final boolean isRegistered(L2Clan clan)
{
if (getSiege() == null)
{
return false;
}
return getSiege().checkIsAttacker(clan);
return (getSiege() != null) && getSiege().checkIsAttacker(clan);
}
public SiegeStatus getSiegeStatus()