Siege method refactorings, concurrent collections and cleanups.

This commit is contained in:
MobiusDevelopment
2020-09-25 21:43:30 +00:00
parent cd38da68ef
commit 193e78ad3a
10 changed files with 82 additions and 104 deletions

View File

@ -80,11 +80,11 @@ public class TakeCastle implements ISkillHandler
{
if ((castle != null) && (targets.get(0) instanceof ArtefactInstance))
{
castle.Engrave(player.getClan(), targets.get(0).getObjectId());
castle.engrave(player.getClan(), targets.get(0).getObjectId());
}
else if (fort != null)
{
fort.EndOfSiege(player.getClan());
fort.endOfSiege(player.getClan());
}
}
catch (Exception e)

View File

@ -101,7 +101,7 @@ public class Castle
loadDoor();
}
public void Engrave(Clan clan, int objId)
public void engrave(Clan clan, int objId)
{
_engrave.put(objId, clan.getClanId());

View File

@ -66,12 +66,12 @@ public class Fort
loadDoor();
}
public void EndOfSiege(Clan clan)
public void endOfSiege(Clan clan)
{
ThreadPool.schedule(new endFortressSiege(this, clan), 1000);
}
public void Engrave(Clan clan, int objId)
public void engrave(Clan clan, int objId)
{
getSiege().announceToPlayer("Clan " + clan.getName() + " has finished to raise the flag.", true);
setOwner(clan);
@ -628,7 +628,7 @@ public class Fort
@Override
public void run()
{
_f.Engrave(_clan, 0);
_f.engrave(_clan, 0);
}
}
}

View File

@ -22,8 +22,10 @@ import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collection;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.logging.Logger;
import org.l2jmobius.commons.concurrent.ThreadPool;
@ -271,9 +273,11 @@ public class Siege
}
}
private final List<SiegeClan> _attackerClans = new ArrayList<>(); // SiegeClan
private final List<SiegeClan> _defenderClans = new ArrayList<>(); // SiegeClan
private final List<SiegeClan> _defenderWaitingClans = new ArrayList<>(); // SiegeClan
// Must support Concurrent Modifications
private final Collection<SiegeClan> _attackerClans = ConcurrentHashMap.newKeySet();
private final Collection<SiegeClan> _defenderClans = ConcurrentHashMap.newKeySet();
private final Collection<SiegeClan> _defenderWaitingClans = ConcurrentHashMap.newKeySet();
private int _defenderRespawnDelayPenalty;
private List<ArtefactInstance> _artifacts = new ArrayList<>();
private List<ControlTowerInstance> _controlTowers = new ArrayList<>();
@ -416,7 +420,7 @@ public class Siege
}
/**
* When control of castle changed during siege
* When control of castle changed during siege.
*/
public void midVictory()
{
@ -427,22 +431,20 @@ public class Siege
_siegeGuardManager.removeMercs(); // Remove all merc entry from db
}
if ((getDefenderClans().isEmpty()) && // If defender doesn't exist (Pc vs Npc)
if (getDefenderClans().isEmpty() && // If defender doesn't exist (Pc vs Npc)
(getAttackerClans().size() == 1)) // Only 1 attacker
{
final SiegeClan scNewOwner = getAttackerClan(getCastle().getOwnerId());
removeAttacker(scNewOwner);
addDefender(scNewOwner, SiegeClanType.OWNER);
endSiege();
return;
}
if (getCastle().getOwnerId() > 0)
{
final int allyId = ClanTable.getInstance().getClan(getCastle().getOwnerId()).getAllyId();
// If defender doesn't exist (Pc vs Npc) and only an alliance attacks
// The player's clan is in an alliance
// If defender doesn't exist (Pc vs Npc) and only an alliance attacks and the player's clan is in an alliance
if (getDefenderClans().isEmpty() && (allyId != 0))
{
boolean allinsamealliance = true;
@ -1640,7 +1642,7 @@ public class Siege
* Gets the attacker clans.
* @return the attacker clans
*/
public List<SiegeClan> getAttackerClans()
public Collection<SiegeClan> getAttackerClans()
{
if (_isNormalSide)
{
@ -1706,7 +1708,7 @@ public class Siege
* Gets the defender clans.
* @return the defender clans
*/
public List<SiegeClan> getDefenderClans()
public Collection<SiegeClan> getDefenderClans()
{
if (_isNormalSide)
{
@ -1750,7 +1752,7 @@ public class Siege
* Gets the defender waiting clans.
* @return the defender waiting clans
*/
public List<SiegeClan> getDefenderWaitingClans()
public Collection<SiegeClan> getDefenderWaitingClans()
{
return _defenderWaitingClans;
}

View File

@ -111,11 +111,31 @@ public class RequestBypassToServer extends GameClientPacket
}
else if (_command.equals("come_here") && player.isGM())
{
comeHere(player);
final WorldObject obj = player.getTarget();
if (obj == null)
{
return;
}
if (obj instanceof NpcInstance)
{
final NpcInstance npc = (NpcInstance) obj;
npc.setTarget(player);
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(player.getX(), player.getY(), player.getZ(), 0));
}
}
else if (_command.startsWith("player_help "))
{
playerHelp(player, _command.substring(12));
final String path = _command.substring(12);
if (path.contains(".."))
{
return;
}
final String filename = "data/html/help/" + path;
final NpcHtmlMessage html = new NpcHtmlMessage(1);
html.setFile(filename);
player.sendPacket(html);
}
else if (_command.startsWith("npc_"))
{
@ -322,37 +342,4 @@ public class RequestBypassToServer extends GameClientPacket
LOGGER.warning("Bad RequestBypassToServer: " + e);
}
}
/**
* @param player
*/
private void comeHere(PlayerInstance player)
{
final WorldObject obj = player.getTarget();
if (obj == null)
{
return;
}
if (obj instanceof NpcInstance)
{
final NpcInstance temp = (NpcInstance) obj;
temp.setTarget(player);
temp.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, new Location(player.getX(), player.getY(), player.getZ(), 0));
// temp.moveTo(player.getX(),player.getY(), player.getZ(), 0 );
}
}
private void playerHelp(PlayerInstance player, String path)
{
if (path.contains(".."))
{
return;
}
final String filename = "data/html/help/" + path;
final NpcHtmlMessage html = new NpcHtmlMessage(1);
html.setFile(filename);
player.sendPacket(html);
}
}