diff --git a/trunk/dist/game/data/Routes.xml b/trunk/dist/game/data/Routes.xml
index 4fdd2d3c69..b1967d0dd5 100644
--- a/trunk/dist/game/data/Routes.xml
+++ b/trunk/dist/game/data/Routes.xml
@@ -191,125 +191,160 @@
-
-
-
-
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
+
+
+
+
+
+
diff --git a/trunk/dist/login/config/LoginServer.properties b/trunk/dist/login/config/LoginServer.properties
index 4afd6d04ca..4db4d3b30b 100644
--- a/trunk/dist/login/config/LoginServer.properties
+++ b/trunk/dist/login/config/LoginServer.properties
@@ -46,7 +46,7 @@ LoginBlockAfterBan = 900
# Default: True
AcceptNewGameServer = True
-# Flood Protection. All values are in MILISECONDS.
+# Flood Protection. All values are in milliseconds.
# Default: True
EnableFloodProtection = True
diff --git a/trunk/dist/tools/sql/game/spawnlist.sql b/trunk/dist/tools/sql/game/spawnlist.sql
index 552b71b4bc..9b98039158 100644
--- a/trunk/dist/tools/sql/game/spawnlist.sql
+++ b/trunk/dist/tools/sql/game/spawnlist.sql
@@ -24089,9 +24089,9 @@ INSERT INTO `spawnlist` VALUES
("dragon_valley", 1, 22815, 88468, 112224, -3256, 0, 0, 11978, 60, 0, 0, 0),
("dragon_valley", 1, 22815, 76971, 117518, -3718, 0, 0, 4767, 60, 0, 0, 0),
-- Mesmer Drake
-("dragon_valley", 1, 22820, 80733, 109807, -3056, 0, 0, 30185, 60, 0, 0, 0),
-("dragon_valley", 1, 22820, 83346, 112987, -3048, 0, 0, 64221, 60, 0, 0, 0),
-("dragon_valley", 1, 22820, 86980, 120934, -3040, 0, 0, 25947, 60, 0, 0, 0),
+("dragon_valley", 1, 22820, 85452, 108916, -3202, 0, 0, 31829, 240, 0, 0, 0),
+("dragon_valley", 1, 22820, 82028, 113982, -3176, 0, 0, 25886, 240, 0, 0, 0),
+("dragon_valley", 1, 22820, 83429, 118625, -2996, 0, 0, 13049, 240, 0, 0, 0),
-- Emerald Drake
("dragon_valley", 1, 22829, 95286, 112420, -3056, 0, 0, 58614, 60, 0, 0, 0),
("dragon_valley", 1, 22829, 94525, 113255, -3048, 0, 0, 3890, 60, 0, 0, 0),
@@ -24175,8 +24175,8 @@ INSERT INTO `spawnlist` VALUES
("dragon_valley", 1, 22830, 97463, 109673, -3680, 0, 0, 62490, 60, 0, 0, 0),
("dragon_valley", 1, 22830, 96837, 109637, -3696, 0, 0, 32816, 60, 0, 0, 0),
-- Dust Dragon Tracker
-("dragon_valley", 1, 22834, 89602, 108262, -3032, 0, 0, 3788, 60, 0, 0, 0),
-("dragon_valley", 1, 22834, 94790, 107669, -3050, 0, 0, 54609, 60, 0, 0, 0),
+("dragon_valley", 1, 22834, 88660, 105889, -3138, 0, 0, 20133, 240, 0, 0, 0),
+("dragon_valley", 1, 22834, 93937, 107688, -3026, 0, 0, 57122, 240, 0, 0, 0),
-- Necromancer of the Valley
("dragon_valley", 1, 22858, 76441, 117265, -3748, 0, 0, 52663, 60, 0, 0, 0),
("dragon_valley", 1, 22858, 77388, 116948, -3805, 0, 0, 62442, 60, 0, 0, 0),
@@ -29678,17 +29678,18 @@ INSERT INTO `spawnlist` VALUES
("dragon_valley", 1, 22828, 117749, 122992, -3112, 0, 0, 50766, 60, 0, 0, 0),
("dragon_valley", 1, 22828, 120448, 116760, -3640, 0, 0, 31676, 60, 0, 0, 0),
-- Dragon Tracker of the Valley
-("dragon_valley", 1, 22831, 113097, 110311, -3000, 0, 0, 30799, 60, 0, 0, 0),
+("dragon_valley", 1, 22831, 110670, 110471, -3061, 0, 0, 30799, 300, 0, 0, 0),
-- Dragon Scout of the Valley
-("dragon_valley", 1, 22832, 113482, 115162, -3200, 0, 0, 64293, 60, 0, 0, 0),
-("dragon_valley", 1, 22832, 122135, 108852, -2961, 0, 0, 36885, 60, 0, 0, 0),
+("dragon_valley", 1, 22832, 114694, 114701, -3151, 0, 0, 799, 300, 0, 0, 0),
+("dragon_valley", 1, 22832, 117266, 111137, -3054, 0, 0, 45144, 300, 0, 0, 0),
+("dragon_valley", 1, 22832, 124950, 109275, -3053, 0, 0, 35245, 300, 0, 0, 0),
-- Sand Drake Tracker
-("dragon_valley", 1, 22833, 123997, 108488, -2986, 0, 0, 58062, 60, 0, 0, 0),
-("dragon_valley", 1, 22833, 114890, 115234, -3217, 0, 0, 59684, 60, 0, 0, 0),
+("dragon_valley", 1, 22833, 123677, 108508, -3015, 0, 0, 58062, 360, 0, 0, 0),
+("dragon_valley", 1, 22833, 113619, 117481, -3129, 0, 0, 22337, 360, 0, 0, 0),
-- Dust Dragon Tracker
-("dragon_valley", 1, 22834, 109329, 115546, -3112, 0, 0, 18198, 60, 0, 0, 0),
-("dragon_valley", 1, 22834, 119960, 109355, -2962, 0, 0, 26432, 60, 0, 0, 0),
-("dragon_valley", 1, 22834, 111281, 110266, -3043, 0, 0, 31060, 60, 0, 0, 0),
+("dragon_valley", 1, 22834, 108770, 117414, -3042, 0, 0, 38802, 240, 0, 0, 0),
+("dragon_valley", 1, 22834, 112508, 110567, -2982, 0, 0, 26432, 240, 0, 0, 0),
+("dragon_valley", 1, 22834, 115880, 110205, -3035, 0, 0, 31060, 240, 0, 0, 0),
-- Hungry Parasitic Leech
("dragon_valley", 1, 22860, 122868, 115636, -3632, 0, 0, 26803, 60, 0, 0, 0),
("dragon_valley", 1, 22860, 122861, 115697, -3632, 0, 0, 21516, 60, 0, 0, 0),
diff --git a/trunk/java/com/l2jserver/gameserver/model/L2Clan.java b/trunk/java/com/l2jserver/gameserver/model/L2Clan.java
index 88437fb483..0e1f2860b6 100644
--- a/trunk/java/com/l2jserver/gameserver/model/L2Clan.java
+++ b/trunk/java/com/l2jserver/gameserver/model/L2Clan.java
@@ -28,8 +28,8 @@ import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.logging.Level;
@@ -134,8 +134,8 @@ public class L2Clan implements IIdentifiable, INamable
private int _bloodOathCount;
private final ItemContainer _warehouse = new ClanWarehouse(this);
- private final List _atWarWith = new CopyOnWriteArrayList<>();
- private final List _atWarAttackers = new CopyOnWriteArrayList<>();
+ private final Set _atWarWith = ConcurrentHashMap.newKeySet();
+ private final Set _atWarAttackers = ConcurrentHashMap.newKeySet();
private Forum _forum;
@@ -1598,7 +1598,7 @@ public class L2Clan implements IIdentifiable, INamable
return _warehouse;
}
- public boolean isAtWarWith(Integer id)
+ public boolean isAtWarWith(int id)
{
return _atWarWith.contains(id);
}
@@ -1658,12 +1658,12 @@ public class L2Clan implements IIdentifiable, INamable
return (_atWarWith != null) && !_atWarWith.isEmpty();
}
- public List getWarList()
+ public Set getWarList()
{
return _atWarWith;
}
- public List getAttackerList()
+ public Set getAttackerList()
{
return _atWarAttackers;
}
diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
index 66e8b20673..c306f64573 100644
--- a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
+++ b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PcInstance.java
@@ -130,7 +130,6 @@ import com.l2jserver.gameserver.model.L2ManufactureItem;
import com.l2jserver.gameserver.model.L2Object;
import com.l2jserver.gameserver.model.L2Party;
import com.l2jserver.gameserver.model.L2Party.messageType;
-import com.l2jserver.gameserver.model.L2PetData;
import com.l2jserver.gameserver.model.L2PetLevelData;
import com.l2jserver.gameserver.model.L2PremiumItem;
import com.l2jserver.gameserver.model.L2Radar;
@@ -434,7 +433,6 @@ public final class L2PcInstance extends L2Playable
/** data for mounted pets */
private int _controlItemId;
- private L2PetData _data;
private L2PetLevelData _leveldata;
private int _curFeed;
protected Future> _mountFeedTask;
@@ -5821,7 +5819,6 @@ public final class L2PcInstance extends L2Playable
stopWarnUserTakeBreak();
stopWaterTask();
stopFeed();
- clearPetData();
storePetFood(_mountNpcId);
stopRentPet();
stopPvpRegTask();
@@ -6509,7 +6506,6 @@ public final class L2PcInstance extends L2Playable
getEffectList().stopAllToggles();
setMount(pet.getId(), pet.getLevel());
setMountObjectID(pet.getControlObjectId());
- clearPetData();
startFeed(pet.getId());
broadcastPacket(new Ride(this));
@@ -6529,7 +6525,6 @@ public final class L2PcInstance extends L2Playable
getEffectList().stopAllToggles();
setMount(npcId, getLevel());
- clearPetData();
setMountObjectID(controlItemObjId);
broadcastPacket(new Ride(this));
@@ -6653,7 +6648,6 @@ public final class L2PcInstance extends L2Playable
int petId = _mountNpcId;
setMount(0, 0);
stopFeed();
- clearPetData();
if (wasFlying)
{
removeSkill(CommonSkill.WYVERN_BREATH.getSkill());
@@ -13033,20 +13027,6 @@ public final class L2PcInstance extends L2Playable
}
}
- private final void clearPetData()
- {
- _data = null;
- }
-
- public final L2PetData getPetData(int npcId)
- {
- if (_data == null)
- {
- _data = PetDataTable.getInstance().getPetData(npcId);
- }
- return _data;
- }
-
private final L2PetLevelData getPetLevelData(int npcId)
{
if (_leveldata == null)
@@ -13091,7 +13071,7 @@ public final class L2PcInstance extends L2Playable
public boolean isHungry()
{
- return _canFeed ? (getCurrentFeed() < ((getPetData(getMountNpcId()).getHungryLimit() / 100f) * getPetLevelData(getMountNpcId()).getPetMaxFeed())) : false;
+ return _canFeed ? (getCurrentFeed() < ((PetDataTable.getInstance().getPetData(getMountNpcId()).getHungryLimit() / 100f) * getPetLevelData(getMountNpcId()).getPetMaxFeed())) : false;
}
public void enteredNoLanding(int delay)
diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/PetFeedTask.java b/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/PetFeedTask.java
index f282d7d66e..2654bb45bb 100644
--- a/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/PetFeedTask.java
+++ b/trunk/java/com/l2jserver/gameserver/model/actor/tasks/player/PetFeedTask.java
@@ -22,6 +22,7 @@ import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
+import com.l2jserver.gameserver.data.xml.impl.PetDataTable;
import com.l2jserver.gameserver.handler.IItemHandler;
import com.l2jserver.gameserver.handler.ItemHandler;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
@@ -47,62 +48,61 @@ public class PetFeedTask implements Runnable
@Override
public void run()
{
- if (_player != null)
+ try
{
- try
+ if (!_player.isMounted() || (_player.getMountNpcId() == 0) || (PetDataTable.getInstance().getPetData(_player.getMountNpcId()) == null))
{
- if (!_player.isMounted() || (_player.getMountNpcId() == 0) || (_player.getPetData(_player.getMountNpcId()) == null))
+ _player.stopFeed();
+ return;
+ }
+
+ if (_player.getCurrentFeed() > _player.getFeedConsume())
+ {
+ // eat
+ _player.setCurrentFeed(_player.getCurrentFeed() - _player.getFeedConsume());
+ }
+ else
+ {
+ // go back to pet control item, or simply said, unsummon it
+ _player.setCurrentFeed(0);
+ _player.stopFeed();
+ _player.dismount();
+ _player.sendPacket(SystemMessageId.YOU_ARE_OUT_OF_FEED_MOUNT_STATUS_CANCELED);
+ return;
+ }
+
+ final List foodIds = PetDataTable.getInstance().getPetData(_player.getMountNpcId()).getFood();
+ if (foodIds.isEmpty())
+ {
+ return;
+ }
+
+ L2ItemInstance food = null;
+ for (int id : foodIds)
+ {
+ // TODO: possibly pet inv?
+ food = _player.getInventory().getItemByItemId(id);
+ if (food != null)
{
- _player.stopFeed();
- return;
- }
-
- if (_player.getCurrentFeed() > _player.getFeedConsume())
- {
- // eat
- _player.setCurrentFeed(_player.getCurrentFeed() - _player.getFeedConsume());
- }
- else
- {
- // go back to pet control item, or simply said, unsummon it
- _player.setCurrentFeed(0);
- _player.stopFeed();
- _player.dismount();
- _player.sendPacket(SystemMessageId.YOU_ARE_OUT_OF_FEED_MOUNT_STATUS_CANCELED);
- }
-
- List foodIds = _player.getPetData(_player.getMountNpcId()).getFood();
- if (foodIds.isEmpty())
- {
- return;
- }
- L2ItemInstance food = null;
- for (int id : foodIds)
- {
- // TODO: possibly pet inv?
- food = _player.getInventory().getItemByItemId(id);
- if (food != null)
- {
- break;
- }
- }
-
- if ((food != null) && _player.isHungry())
- {
- IItemHandler handler = ItemHandler.getInstance().getHandler(food.getEtcItem());
- if (handler != null)
- {
- handler.useItem(_player, food, false);
- SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOUR_PET_WAS_HUNGRY_SO_IT_ATE_S1);
- sm.addItemName(food.getId());
- _player.sendPacket(sm);
- }
+ break;
}
}
- catch (Exception e)
+
+ if ((food != null) && _player.isHungry())
{
- _log.log(Level.SEVERE, "Mounted Pet [NpcId: " + _player.getMountNpcId() + "] a feed task error has occurred", e);
+ IItemHandler handler = ItemHandler.getInstance().getHandler(food.getEtcItem());
+ if (handler != null)
+ {
+ handler.useItem(_player, food, false);
+ SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.YOUR_PET_WAS_HUNGRY_SO_IT_ATE_S1);
+ sm.addItemName(food.getId());
+ _player.sendPacket(sm);
+ }
}
}
+ catch (Exception e)
+ {
+ _log.log(Level.SEVERE, "Mounted Pet [NpcId: " + _player.getMountNpcId() + "] a feed task error has occurred", e);
+ }
}
}
diff --git a/trunk/java/com/l2jserver/gameserver/model/olympiad/OlympiadGameTask.java b/trunk/java/com/l2jserver/gameserver/model/olympiad/OlympiadGameTask.java
index 3ce92526f5..7569127eb3 100644
--- a/trunk/java/com/l2jserver/gameserver/model/olympiad/OlympiadGameTask.java
+++ b/trunk/java/com/l2jserver/gameserver/model/olympiad/OlympiadGameTask.java
@@ -98,6 +98,7 @@ public final class OlympiadGameTask implements Runnable
BATTLE_COUNTDOWN_SECOND,
BATTLE_STARTED,
BATTLE_IN_PROGRESS,
+ GAME_CANCELLED,
GAME_STOPPED,
TELEPORT_TO_TOWN,
CLEANUP,
@@ -201,7 +202,7 @@ public final class OlympiadGameTask implements Runnable
{
if (!startGame())
{
- _state = GameState.GAME_STOPPED;
+ _state = GameState.GAME_CANCELLED;
break;
}
@@ -273,6 +274,13 @@ public final class OlympiadGameTask implements Runnable
break;
}
+ // Battle cancelled before teleport participants to the stadium
+ case GAME_CANCELLED:
+ {
+ stopGame();
+ _state = GameState.CLEANUP;
+ break;
+ }
// End of the battle
case GAME_STOPPED:
{