Code improvements.
This commit is contained in:
@@ -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()));
|
||||
}
|
||||
|
@@ -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()))
|
||||
{
|
||||
|
@@ -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
|
||||
|
@@ -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
|
||||
|
@@ -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));
|
||||
|
@@ -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);
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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
|
||||
|
@@ -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)
|
||||
|
@@ -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)
|
||||
{
|
||||
|
@@ -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)
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@@ -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)
|
||||
|
@@ -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();
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@@ -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);
|
||||
|
@@ -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()
|
||||
|
Reference in New Issue
Block a user