Sync with L2jServer HighFive Feb 23rd 2015.
This commit is contained in:
@ -21,6 +21,7 @@ package com.l2jserver.gameserver.model.entity;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Calendar;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -54,6 +55,8 @@ public class Duel
|
||||
public static final int DUELSTATE_WINNER = 3;
|
||||
public static final int DUELSTATE_INTERRUPTED = 4;
|
||||
|
||||
private static final PlaySound B04_S01 = new PlaySound(1, "B04_S01", 0, 0, 0, 0, 0);
|
||||
|
||||
private final int _duelId;
|
||||
private L2PcInstance _playerA;
|
||||
private L2PcInstance _playerB;
|
||||
@ -63,7 +66,7 @@ public class Duel
|
||||
private int _countdown = 4;
|
||||
private boolean _finished = false;
|
||||
|
||||
private List<PlayerCondition> _playerConditions;
|
||||
private final List<PlayerCondition> _playerConditions = new CopyOnWriteArrayList<>();
|
||||
|
||||
public Duel(L2PcInstance playerA, L2PcInstance playerB, int partyDuel, int duelId)
|
||||
{
|
||||
@ -82,15 +85,13 @@ public class Duel
|
||||
_duelEndTime.add(Calendar.SECOND, 120);
|
||||
}
|
||||
|
||||
_playerConditions = new ArrayList<>();
|
||||
|
||||
setFinished(false);
|
||||
|
||||
if (_partyDuel)
|
||||
{
|
||||
// increase countdown so that start task can teleport players
|
||||
_countdown++;
|
||||
// inform players that they will be portet shortly
|
||||
// inform players that they will be ported shortly
|
||||
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.IN_A_MOMENT_YOU_WILL_BE_TRANSPORTED_TO_THE_SITE_WHERE_THE_DUEL_WILL_TAKE_PLACE);
|
||||
broadcastToTeam1(sm);
|
||||
broadcastToTeam2(sm);
|
||||
@ -358,9 +359,7 @@ public class Duel
|
||||
|
||||
if ((_playerA == null) || (_playerB == null) || _playerA.isInDuel() || _playerB.isInDuel())
|
||||
{
|
||||
// clean up
|
||||
_playerConditions.clear();
|
||||
_playerConditions = null;
|
||||
DuelManager.getInstance().removeDuel(this);
|
||||
return;
|
||||
}
|
||||
@ -420,9 +419,8 @@ public class Duel
|
||||
}
|
||||
|
||||
// play sound
|
||||
PlaySound ps = new PlaySound(1, "B04_S01", 0, 0, 0, 0, 0);
|
||||
broadcastToTeam1(ps);
|
||||
broadcastToTeam2(ps);
|
||||
broadcastToTeam1(B04_S01);
|
||||
broadcastToTeam2(B04_S01);
|
||||
|
||||
// start duelling task
|
||||
ThreadPoolManager.getInstance().scheduleGeneral(new ScheduleDuelTask(this), 1000);
|
||||
@ -435,13 +433,13 @@ public class Duel
|
||||
{
|
||||
if (_partyDuel)
|
||||
{
|
||||
for (L2PcInstance temp : _playerA.getParty().getMembers())
|
||||
for (L2PcInstance player : _playerA.getParty().getMembers())
|
||||
{
|
||||
_playerConditions.add(new PlayerCondition(temp, _partyDuel));
|
||||
_playerConditions.add(new PlayerCondition(player, _partyDuel));
|
||||
}
|
||||
for (L2PcInstance temp : _playerB.getParty().getMembers())
|
||||
for (L2PcInstance player : _playerB.getParty().getMembers())
|
||||
{
|
||||
_playerConditions.add(new PlayerCondition(temp, _partyDuel));
|
||||
_playerConditions.add(new PlayerCondition(player, _partyDuel));
|
||||
}
|
||||
}
|
||||
else
|
||||
@ -490,10 +488,7 @@ public class Duel
|
||||
}
|
||||
|
||||
// restore player conditions
|
||||
for (PlayerCondition cond : _playerConditions)
|
||||
{
|
||||
cond.restoreCondition();
|
||||
}
|
||||
_playerConditions.forEach(c -> c.restoreCondition());
|
||||
}
|
||||
|
||||
/**
|
||||
@ -735,7 +730,6 @@ public class Duel
|
||||
{
|
||||
// clean up
|
||||
_playerConditions.clear();
|
||||
_playerConditions = null;
|
||||
DuelManager.getInstance().removeDuel(this);
|
||||
return;
|
||||
}
|
||||
@ -780,7 +774,7 @@ public class Duel
|
||||
break;
|
||||
case Canceled:
|
||||
stopFighting();
|
||||
// dont restore hp, mp, cp
|
||||
// Don't restore hp, mp, cp
|
||||
restorePlayerConditions(true);
|
||||
// TODO: is there no other message for a canceled duel?
|
||||
// send SystemMessage
|
||||
@ -817,7 +811,6 @@ public class Duel
|
||||
|
||||
// clean up
|
||||
_playerConditions.clear();
|
||||
_playerConditions = null;
|
||||
DuelManager.getInstance().removeDuel(this);
|
||||
}
|
||||
|
||||
@ -898,7 +891,7 @@ public class Duel
|
||||
*/
|
||||
public void doSurrender(L2PcInstance player)
|
||||
{
|
||||
// already recived a surrender request
|
||||
// already received a surrender request
|
||||
if (_surrenderRequest != 0)
|
||||
{
|
||||
return;
|
||||
@ -1012,14 +1005,14 @@ public class Duel
|
||||
*/
|
||||
public void onRemoveFromParty(L2PcInstance player)
|
||||
{
|
||||
// if it isnt a party duel ignore this
|
||||
// if it isn't a party duel ignore this
|
||||
if (!_partyDuel)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// this player is leaving his party during party duel
|
||||
// if hes either playerA or playerB cancel the duel and port the players back
|
||||
// if he's either playerA or playerB cancel the duel and port the players back
|
||||
if ((player == _playerA) || (player == _playerB))
|
||||
{
|
||||
for (PlayerCondition cond : _playerConditions)
|
||||
@ -1034,14 +1027,11 @@ public class Duel
|
||||
else
|
||||
// teleport the player back & delete his PlayerCondition record
|
||||
{
|
||||
for (PlayerCondition cond : _playerConditions)
|
||||
final PlayerCondition cond = _playerConditions.stream().filter(c -> c.getPlayer() == player).findFirst().orElse(null);
|
||||
if (cond != null)
|
||||
{
|
||||
if (cond.getPlayer() == player)
|
||||
{
|
||||
cond.teleportBack();
|
||||
_playerConditions.remove(cond);
|
||||
break;
|
||||
}
|
||||
cond.teleportBack();
|
||||
_playerConditions.remove(cond);
|
||||
}
|
||||
player.setIsInDuel(0);
|
||||
}
|
||||
@ -1049,13 +1039,10 @@ public class Duel
|
||||
|
||||
public void onBuff(L2PcInstance player, Skill debuff)
|
||||
{
|
||||
for (PlayerCondition cond : _playerConditions)
|
||||
final PlayerCondition cond = _playerConditions.stream().filter(c -> c.getPlayer() == player).findFirst().orElse(null);
|
||||
if (cond != null)
|
||||
{
|
||||
if (cond.getPlayer() == player)
|
||||
{
|
||||
cond.registerDebuff(debuff);
|
||||
return;
|
||||
}
|
||||
cond.registerDebuff(debuff);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user