diff --git a/trunk/dist/game/data/html/default/32537-1.htm b/trunk/dist/game/data/html/default/32537-1.htm
index 3338d17698..35b3ea5988 100644
--- a/trunk/dist/game/data/html/default/32537-1.htm
+++ b/trunk/dist/game/data/html/default/32537-1.htm
@@ -1,6 +1,6 @@
Mouth of Ekimus:
The echoes of the screams of the dying spread to the other side of the gap.
The name Hall of Suffering seems to suit this place where new souls are made.
-(The Hall of Erosion is an instant zone exclusively for party use.)
-
+(The Hall of Suffering is an instant zone exclusively for party use.)
+
\ No newline at end of file
diff --git a/trunk/dist/game/data/scripts/quests/Q00662_AGameOfCards/Q00662_AGameOfCards.java b/trunk/dist/game/data/scripts/quests/Q00662_AGameOfCards/Q00662_AGameOfCards.java
index 64416a75f2..1dceaf9833 100644
--- a/trunk/dist/game/data/scripts/quests/Q00662_AGameOfCards/Q00662_AGameOfCards.java
+++ b/trunk/dist/game/data/scripts/quests/Q00662_AGameOfCards/Q00662_AGameOfCards.java
@@ -23,7 +23,6 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import com.l2jserver.gameserver.enums.QuestSound;
import com.l2jserver.gameserver.model.actor.L2Npc;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
import com.l2jserver.gameserver.model.quest.Quest;
@@ -115,8 +114,10 @@ public final class Q00662_AGameOfCards extends Quest
{
if (player.getLevel() >= MIN_LEVEL)
{
- st.setState(State.STARTED);
- st.playSound(QuestSound.ITEMSOUND_QUEST_ACCEPT);
+ if (st.isCreated())
+ {
+ st.startQuest();
+ }
htmltext = event;
}
break;
@@ -239,9 +240,8 @@ public final class Q00662_AGameOfCards extends Quest
{
i5 = i5 - 14;
}
-
- st.setCond((i4 * 1000000) + (i3 * 10000) + (i2 * 100) + i1);
- st.set("ex", i5);
+ st.set("v1", (i4 * 1000000) + (i3 * 10000) + (i2 * 100) + i1);
+ st.set("ExMemoState", i5);
st.takeItems(RED_GEM, REQUIRED_CHIP_COUNT);
htmltext = event;
}
@@ -253,8 +253,8 @@ public final class Q00662_AGameOfCards extends Quest
case "turncard4":
case "turncard5":
{
- final int cond = st.getCond();
- int i1 = st.getInt("ex");
+ final int cond = st.getInt("v1");
+ int i1 = st.getInt("ExMemoState");
int i5 = i1 % 100;
int i9 = i1 / 100;
i1 = cond % 100;
@@ -271,7 +271,7 @@ public final class Q00662_AGameOfCards extends Quest
}
if ((i9 % 32) < 31)
{
- st.set("ex", (i9 * 100) + i5);
+ st.set("ExMemoState", (i9 * 100) + i5);
}
break;
}
@@ -283,7 +283,7 @@ public final class Q00662_AGameOfCards extends Quest
}
if ((i9 % 32) < 31)
{
- st.set("ex", (i9 * 100) + i5);
+ st.set("ExMemoState", (i9 * 100) + i5);
}
break;
}
@@ -295,7 +295,7 @@ public final class Q00662_AGameOfCards extends Quest
}
if ((i9 % 32) < 31)
{
- st.set("ex", (i9 * 100) + i5);
+ st.set("ExMemoState", (i9 * 100) + i5);
}
break;
}
@@ -307,7 +307,7 @@ public final class Q00662_AGameOfCards extends Quest
}
if ((i9 % 32) < 31)
{
- st.set("ex", (i9 * 100) + i5);
+ st.set("ExMemoState", (i9 * 100) + i5);
}
break;
}
@@ -319,7 +319,7 @@ public final class Q00662_AGameOfCards extends Quest
}
if ((i9 % 32) < 31)
{
- st.set("ex", (i9 * 100) + i5);
+ st.set("ExMemoState", (i9 * 100) + i5);
}
break;
}
@@ -491,55 +491,55 @@ public final class Q00662_AGameOfCards extends Quest
if (i6 == 40)
{
- st.giveItems(ZIGGOS_GEMSTONE, 43);
- st.giveItems(959, 3);
- st.giveItems(729, 1);
- st.set("ex", 0);
- st.setCond(0);
+ rewardItems(player, ZIGGOS_GEMSTONE, 43);
+ rewardItems(player, 959, 3);
+ rewardItems(player, 729, 1);
+ st.set("ExMemoState", 0);
+ st.set("v1", 0);
htmltext = getHtm(player.getHtmlPrefix(), "30845-13.html");
}
else if (i6 == 30)
{
- st.giveItems(959, 2);
- st.giveItems(951, 2);
- st.set("ex", 0);
- st.setCond(0);
+ rewardItems(player, 959, 2);
+ rewardItems(player, 951, 2);
+ st.set("ExMemoState", 0);
+ st.set("v1", 0);
htmltext = getHtm(player.getHtmlPrefix(), "30845-14.html");
}
else if ((i6 == 21) || (i6 == 12))
{
- st.giveItems(729, 1);
- st.giveItems(947, 2);
- st.giveItems(955, 1);
- st.set("ex", 0);
- st.setCond(0);
+ rewardItems(player, 729, 1);
+ rewardItems(player, 947, 2);
+ rewardItems(player, 955, 1);
+ st.set("ExMemoState", 0);
+ st.set("v1", 0);
htmltext = getHtm(player.getHtmlPrefix(), "30845-15.html");
}
else if (i6 == 20)
{
- st.giveItems(951, 2);
- st.set("ex", 0);
- st.setCond(0);
+ rewardItems(player, 951, 2);
+ st.set("ExMemoState", 0);
+ st.set("v1", 0);
htmltext = getHtm(player.getHtmlPrefix(), "30845-16.html");
}
else if (i6 == 11)
{
- st.giveItems(951, 1);
- st.set("ex", 0);
- st.setCond(0);
+ rewardItems(player, 951, 1);
+ st.set("ExMemoState", 0);
+ st.set("v1", 0);
htmltext = getHtm(player.getHtmlPrefix(), "30845-17.html");
}
else if (i6 == 10)
{
- st.giveItems(956, 2);
- st.set("ex", 0);
- st.setCond(0);
+ rewardItems(player, 956, 2);
+ st.set("ExMemoState", 0);
+ st.set("v1", 0);
htmltext = getHtm(player.getHtmlPrefix(), "30845-18.html");
}
else if (i6 == 0)
{
- st.set("ex", 0);
- st.setCond(0);
+ st.set("ExMemoState", 0);
+ st.set("v1", 0);
htmltext = getHtm(player.getHtmlPrefix(), "30845-19.html");
}
}
@@ -627,14 +627,14 @@ public final class Q00662_AGameOfCards extends Quest
}
case State.STARTED:
{
- if (st.isCond(0))
+ if (st.isCond(1))
{
- htmltext = "30845-04.html";
+ htmltext = st.getQuestItemsCount(RED_GEM) < REQUIRED_CHIP_COUNT ? "30845-04.html" : "30845-05.html";
}
- else if (st.getInt("ex") != 0)
+ else if (st.getInt("ExMemoState") != 0)
{
- int i0 = st.getCond();
- int i1 = st.getInt("ex");
+ int i0 = st.getInt("v1");
+ int i1 = st.getInt("ExMemoState");
int i5 = i1 % 100;
int i9 = i1 / 100;
i1 = i0 % 100;
@@ -733,8 +733,7 @@ public final class Q00662_AGameOfCards extends Quest
final QuestState st = getQuestState(player, false);
if (st != null)
{
- st.giveItems(RED_GEM, 1);
- playSound(player, QuestSound.ITEMSOUND_QUEST_ITEMGET);
+ giveItemRandomly(st.getPlayer(), npc, RED_GEM, 1, 0, MONSTERS.get(npc.getId()), true);
}
}
}
diff --git a/trunk/dist/game/data/stats/npcs/18800-18899.xml b/trunk/dist/game/data/stats/npcs/18800-18899.xml
index bec42163cb..d61e1ca4f8 100644
--- a/trunk/dist/game/data/stats/npcs/18800-18899.xml
+++ b/trunk/dist/game/data/stats/npcs/18800-18899.xml
@@ -3354,6 +3354,8 @@
+
+
@@ -3565,6 +3567,8 @@
+
+
@@ -4091,6 +4095,8 @@
+
+
@@ -4303,6 +4309,8 @@
+
+
@@ -4835,6 +4843,8 @@
+
+
@@ -5047,6 +5057,8 @@
+
+
@@ -5566,6 +5578,8 @@
+
+
@@ -5777,6 +5791,8 @@
+
+
diff --git a/trunk/dist/game/data/stats/skills/00900-00999.xml b/trunk/dist/game/data/stats/skills/00900-00999.xml
index 4fe03d18a8..1f6604b617 100644
--- a/trunk/dist/game/data/stats/skills/00900-00999.xml
+++ b/trunk/dist/game/data/stats/skills/00900-00999.xml
@@ -2384,6 +2384,7 @@
+
diff --git a/trunk/dist/game/data/stats/skills/22200-22299.xml b/trunk/dist/game/data/stats/skills/22200-22299.xml
index 7c512d1884..3ec27f20b4 100644
--- a/trunk/dist/game/data/stats/skills/22200-22299.xml
+++ b/trunk/dist/game/data/stats/skills/22200-22299.xml
@@ -630,7 +630,7 @@
- 312,1,4.76;167,1,4.76;220,1,4.76;178,1,4.76;221,1,4.76;123,1,4.76;156,1,4.76;291,1,4.76;166,1,4.76;274,1,4.76;21731,1,4.76;318,1,4.76;21738,1,4.76;21732,1,4.76;294,1,4.76;88,1,4.76;90,1,4.76;21735,1,4.76;172,1,4.76;279,1,4.76;169,1,4.8
+ 71,1,3.76;72,1,3.76;73,1,3.76;74,1,3.76;75,1,3.76;76,1,3.76;77,1,3.76;84,1,3.76;88,1,4.76;89,1,3.76;90,1,4.76;93,1,4.76;94,1,3.76;95,1,3.76;96,1,3.76;123,1,4.76;129,1,4.76;131,1,3.76;132,1,3.76;133,1,3.76;134,1,3.76;135,1,3.76;145,1,3.76;156,1,4.76;158,1,4.76;160,1,3.76;161,1,3.76;162,1,3.76;166,1,4.76;167,1,4.76;169,1,4.76;172,1,4.76;173,1,3.76;174,1,3.76;178,1,4.76;191,1,3.76;192,1,3.76;193,1,3.76;194,1,3.76;195,1,3.76;196,1,3.76;197,1,3.76;198,1,3.76;199,1,3.76;200,1,3.76;201,1,3.76;202,1,3.76;203,1,3.76;204,1,3.76;205,1,3.76;206,1,3.76;220,1,4.76;221,1,4.76;224,1,4.76;226,1,3.76;227,1,3.76;228,1,3.76;230,1,3.76;231,1,3.76;232,1,3.76;233,1,3.76;242,1,3.76;258,1,4.76;261,1,4.76;263,1,3.76;265,1,3.76;266,1,3.76;274,1,4.76;279,1,4.76;281,1,3.76;282,1,3.76;283,1,3.76;285,1,3.76;286,1,3.76;291,1,4.76;294,1,4.76;298,1,3.76;299,1,3.76;301,1,3.76;302,1,3.76;303,1,3.76;312,1,4.76;318,1,4.76;324,1,3.76;325,1,3.76;326,1,3.76;327,1,3.76;328,1,3.76;329,1,3.76;330,1,3.76;331,1,3.76;332,1,3.76;333,1,3.76;334,1,3.76;2502,1,3.76;2503,1,3.76;4233,1,3.76;5286,1,3.76;7882,1,3.76;7887,1,3.76;7888,1,3.76;7891,1,3.76;7897,1,3.76;7898,1,3.76;9228,1,3.76;9232,1,3.76;9236,1,3.76;9240,1,3.76;9244,1,3.76;9248,1,3.76;9252,1,3.76;9256,1,3.76;9260,1,3.76;9264,1,3.76;9268,1,3.76;9272,1,3.76;9276,1,3.76;9280,1,3.76;9284,1,3.76;9288,1,3.76;9292,1,3.76;9296,1,3.76;9300,1,3.76
@@ -649,7 +649,7 @@
- 160,1,4.16;298,1,4.16;72,1,4.16;193,1,4.16;192,1,4.16;281,1,4.16;7887,1,4.16;226,1,4.16;191,1,4.16;71,1,4.16;263,1,4.16;78,1,2.5;300,1,2.5;284,1,2.5;142,1,2.5;267,1,2.5;229,1,2.5;148,1,2.5;243,1,2.5;7892,1,2.5;91,1,1.36;80,1,1.36;235,1,1.36;269,1,1.36;288,1,1.36;7884,1,1.36;2504,1,1.36;150,1,1.36;7889,1,1.36;6364,1,0.45;6365,1,0.45;6366,1,0.45;6367,1,0.45;6368,1,0.45;6369,1,0.45;6370,1,0.45;6371,1,0.45;6372,1,0.45;7575,1,0.45
+ 78,1,4.16;79,1,4.16;80,1,2.5;81,1,2.5;82,1,0.45;85,1,2.5;91,1,4.16;92,1,4.16;97,1,4.16;98,1,2.5;142,1,4.16;146,1,4.16;147,1,2.5;148,1,4.16;149,1,2.5;150,1,2.5;151,1,2.5;164,1,2.5;171,1,4.16;175,1,4.16;207,1,4.16;208,1,4.16;209,1,4.16;210,1,4.16;211,1,4.16;212,1,2.5;213,1,2.5;229,1,4.16;234,1,4.16;235,1,2.5;236,1,2.5;243,1,4.16;264,1,4.16;267,1,4.16;268,1,4.16;269,1,2.5;270,1,2.5;284,1,4.16;287,1,4.16;288,1,2.5;289,1,2.5;300,1,4.16;304,1,2.5;305,1,2.5;335,1,4.16;336,1,4.16;337,1,4.16;338,1,4.16;339,1,4.16;340,1,4.16;341,1,2.5;342,1,2.5;343,1,2.5;344,1,2.5;345,1,2.5;346,1,0.45;2500,1,2.5;2504,1,2.5;6364,1,0.45;6365,1,0.45;6366,1,0.45;6367,1,0.45;6368,1,0.45;6369,1,0.45;6370,1,0.45;6371,1,0.45;6372,1,0.45;6579,1,0.45;7575,1,0.45;7883,1,4.16;7884,1,2.5;7889,1,4.16;7892,1,4.16;7893,1,4.16;7894,1,2.5;7895,1,2.5;7899,1,2.5;7900,1,4.16;7901,1,4.16;7902,1,2.5;8678,1,2.5;8682,1,2.5;8683,1,2.5;8684,1,2.5;8685,1,2.5;8686,1,2.5;8688,1,2.5;9304,1,4.16;9308,1,4.16;9312,1,4.16;9316,1,4.16;9320,1,4.16;9324,1,4.16;9328,1,2.5;9332,1,2.5;9336,1,2.5;9340,1,2.5;9344,1,2.5;9348,1,2.5;9352,1,2.5;9356,1,2.5;9360,1,2.5;9364,1,0.45;9368,1,0.45;9372,1,0.45
diff --git a/trunk/java/com/l2jserver/gameserver/GameServer.java b/trunk/java/com/l2jserver/gameserver/GameServer.java
index 278a8fe5fc..7b359fd97f 100644
--- a/trunk/java/com/l2jserver/gameserver/GameServer.java
+++ b/trunk/java/com/l2jserver/gameserver/GameServer.java
@@ -155,7 +155,7 @@ import com.l2jserver.status.Status;
import com.l2jserver.util.DeadLockDetector;
import com.l2jserver.util.IPv4Filter;
-public class GameServer
+public final class GameServer
{
private static final Logger _log = Logger.getLogger(GameServer.class.getName());
diff --git a/trunk/java/com/l2jserver/gameserver/GeoData.java b/trunk/java/com/l2jserver/gameserver/GeoData.java
index d5e19df75a..0aa156c2f6 100644
--- a/trunk/java/com/l2jserver/gameserver/GeoData.java
+++ b/trunk/java/com/l2jserver/gameserver/GeoData.java
@@ -200,7 +200,7 @@ public class GeoData
return z;
}
- int nextLowerZ = getNextLowerZ(geoX, geoY, z + 100);
+ int nextLowerZ = getNextLowerZ(geoX, geoY, z + 20);
return Math.abs(nextLowerZ - z) <= SPAWN_Z_DELTA_LIMIT ? nextLowerZ : z;
}
diff --git a/trunk/java/com/l2jserver/gameserver/cache/HtmCache.java b/trunk/java/com/l2jserver/gameserver/cache/HtmCache.java
index 65379730ec..72f5b72977 100644
--- a/trunk/java/com/l2jserver/gameserver/cache/HtmCache.java
+++ b/trunk/java/com/l2jserver/gameserver/cache/HtmCache.java
@@ -91,15 +91,18 @@ public class HtmCache
private void parseDir(File dir)
{
final File[] files = dir.listFiles();
- for (File file : files)
+ if (files != null)
{
- if (!file.isDirectory())
+ for (File file : files)
{
- loadFile(file);
- }
- else
- {
- parseDir(file);
+ if (!file.isDirectory())
+ {
+ loadFile(file);
+ }
+ else
+ {
+ parseDir(file);
+ }
}
}
}
diff --git a/trunk/java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java b/trunk/java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java
index 773b677f16..4292988e77 100644
--- a/trunk/java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java
+++ b/trunk/java/com/l2jserver/gameserver/communitybbs/Manager/PostBBSManager.java
@@ -106,14 +106,21 @@ public class PostBBSManager extends BaseBBSManager
private void showEditPost(Topic topic, Forum forum, L2PcInstance activeChar, int idp)
{
- Post p = getGPosttByTopic(topic);
- if ((forum == null) || (topic == null) || (p == null))
+ if (topic == null)
{
- CommunityBoardHandler.separateAndSend("
Error, this forum, topic or post does not exit !
", activeChar);
+ CommunityBoardHandler.separateAndSend("
Error: This topic does not exist!", activeChar);
}
else
{
- showHtmlEditPost(topic, activeChar, forum, p);
+ final Post p = getGPosttByTopic(topic);
+ if ((forum == null) || (p == null))
+ {
+ CommunityBoardHandler.separateAndSend("
Error: This forum or post does not exist!", activeChar);
+ }
+ else
+ {
+ showHtmlEditPost(topic, activeChar, forum, p);
+ }
}
}
@@ -121,7 +128,7 @@ public class PostBBSManager extends BaseBBSManager
{
if ((forum == null) || (topic == null))
{
- CommunityBoardHandler.separateAndSend("
Error, this forum is not implemented yet
", activeChar);
+ CommunityBoardHandler.separateAndSend("
Error: This forum is not implemented yet!", activeChar);
}
else if (forum.getType() == Forum.MEMO)
{
@@ -129,7 +136,7 @@ public class PostBBSManager extends BaseBBSManager
}
else
{
- CommunityBoardHandler.separateAndSend("
the forum: " + forum.getName() + " is not implemented yet
", activeChar);
+ CommunityBoardHandler.separateAndSend("
The forum: " + forum.getName() + " is not implemented yet!", activeChar);
}
}
@@ -142,7 +149,6 @@ public class PostBBSManager extends BaseBBSManager
private void showMemoPost(Topic topic, L2PcInstance activeChar, Forum forum)
{
- //
Post p = getGPosttByTopic(topic);
Locale locale = Locale.getDefault();
DateFormat dateFormat = DateFormat.getDateInstance(DateFormat.FULL, locale);
diff --git a/trunk/java/com/l2jserver/gameserver/data/sql/impl/SummonEffectsTable.java b/trunk/java/com/l2jserver/gameserver/data/sql/impl/SummonEffectsTable.java
index 3ba94314e4..3bc599a822 100644
--- a/trunk/java/com/l2jserver/gameserver/data/sql/impl/SummonEffectsTable.java
+++ b/trunk/java/com/l2jserver/gameserver/data/sql/impl/SummonEffectsTable.java
@@ -18,11 +18,17 @@
*/
package com.l2jserver.gameserver.data.sql.impl;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.concurrent.CopyOnWriteArrayList;
+import com.l2jserver.gameserver.model.actor.L2Summon;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2PetInstance;
+import com.l2jserver.gameserver.model.actor.instance.L2ServitorInstance;
import com.l2jserver.gameserver.model.skills.Skill;
/**
@@ -37,12 +43,7 @@ public class SummonEffectsTable
// ---> key: servitorSkillId, value: Effects list
private final Map>>> _servitorEffects = new HashMap<>();
- public Map>>> getServitorEffectsOwner()
- {
- return _servitorEffects;
- }
-
- public Map> getServitorEffects(L2PcInstance owner)
+ private Map> getServitorEffects(L2PcInstance owner)
{
final Map>> servitorMap = _servitorEffects.get(owner.getObjectId());
if (servitorMap == null)
@@ -52,15 +53,107 @@ public class SummonEffectsTable
return servitorMap.get(owner.getClassIndex());
}
+ private List getServitorEffects(L2PcInstance owner, int referenceSkill)
+ {
+ return containsOwner(owner) ? getServitorEffects(owner).get(referenceSkill) : null;
+ }
+
+ private boolean containsOwner(L2PcInstance owner)
+ {
+ return _servitorEffects.getOrDefault(owner.getObjectId(), Collections.emptyMap()).containsKey(owner.getClassIndex());
+ }
+
+ private void removeEffects(List effects, int skillId)
+ {
+ if ((effects != null) && !effects.isEmpty())
+ {
+ for (SummonEffect effect : effects)
+ {
+ final Skill skill = effect.getSkill();
+ if ((skill != null) && (skill.getId() == skillId))
+ {
+ effects.remove(effect);
+ }
+ }
+ }
+ }
+
+ private void applyEffects(L2Summon summon, List summonEffects)
+ {
+ if (summonEffects == null)
+ {
+ return;
+ }
+ for (SummonEffect se : summonEffects)
+ {
+ if (se != null)
+ {
+ se.getSkill().applyEffects(summon, summon, false, se.getEffectCurTime());
+ }
+ }
+ }
+
+ public boolean containsSkill(L2PcInstance owner, int referenceSkill)
+ {
+ return containsOwner(owner) && getServitorEffects(owner).containsKey(referenceSkill);
+ }
+
+ public void clearServitorEffects(L2PcInstance owner, int referenceSkill)
+ {
+ if (containsOwner(owner))
+ {
+
+ getServitorEffects(owner).getOrDefault(referenceSkill, Collections.emptyList()).clear();
+ }
+ }
+
+ public void addServitorEffect(L2PcInstance owner, int referenceSkill, Skill skill, int effectCurTime)
+ {
+ _servitorEffects.putIfAbsent(owner.getObjectId(), new HashMap>>());
+ _servitorEffects.get(owner.getObjectId()).putIfAbsent(owner.getClassIndex(), new HashMap>());
+ getServitorEffects(owner).putIfAbsent(referenceSkill, new CopyOnWriteArrayList());
+ getServitorEffects(owner).get(referenceSkill).add(new SummonEffect(skill, effectCurTime));
+ }
+
+ public void removeServitorEffects(L2PcInstance owner, int referenceSkill, int skillId)
+ {
+ removeEffects(getServitorEffects(owner, referenceSkill), skillId);
+ }
+
+ public void applyServitorEffects(L2ServitorInstance l2ServitorInstance, L2PcInstance owner, int referenceSkill)
+ {
+ applyEffects(l2ServitorInstance, getServitorEffects(owner, referenceSkill));
+ }
+
/** Pets **/
private final Map> _petEffects = new HashMap<>(); // key: petItemObjectId, value: Effects list
- public Map> getPetEffects()
+ public void addPetEffect(int controlObjectId, Skill skill, int effectCurTime)
{
- return _petEffects;
+ _petEffects.putIfAbsent(controlObjectId, new ArrayList<>()).add(new SummonEffect(skill, effectCurTime));
}
- public class SummonEffect
+ public boolean containsPetId(int controlObjectId)
+ {
+ return _petEffects.containsKey(controlObjectId);
+ }
+
+ public void applyPetEffects(L2PetInstance l2PetInstance, int controlObjectId)
+ {
+ applyEffects(l2PetInstance, _petEffects.get(controlObjectId));
+ }
+
+ public void clearPetEffects(int controlObjectId)
+ {
+ _petEffects.getOrDefault(controlObjectId, Collections.emptyList()).clear();
+ }
+
+ public void removePetEffects(int controlObjectId, int skillId)
+ {
+ removeEffects(_petEffects.get(controlObjectId), skillId);
+ }
+
+ private class SummonEffect
{
Skill _skill;
int _effectCurTime;
diff --git a/trunk/java/com/l2jserver/gameserver/engines/DocumentEngine.java b/trunk/java/com/l2jserver/gameserver/engines/DocumentEngine.java
index 13a51664da..8eef36f15c 100644
--- a/trunk/java/com/l2jserver/gameserver/engines/DocumentEngine.java
+++ b/trunk/java/com/l2jserver/gameserver/engines/DocumentEngine.java
@@ -69,10 +69,14 @@ public class DocumentEngine
_log.warning("Dir " + dir.getAbsolutePath() + " not exists");
return;
}
- File[] files = dir.listFiles(new XMLFilter());
- for (File f : files)
+
+ final File[] files = dir.listFiles(new XMLFilter());
+ if (files != null)
{
- hash.add(f);
+ for (File f : files)
+ {
+ hash.add(f);
+ }
}
}
diff --git a/trunk/java/com/l2jserver/gameserver/instancemanager/DuelManager.java b/trunk/java/com/l2jserver/gameserver/instancemanager/DuelManager.java
index 75eb88ebc2..aca752c6b2 100644
--- a/trunk/java/com/l2jserver/gameserver/instancemanager/DuelManager.java
+++ b/trunk/java/com/l2jserver/gameserver/instancemanager/DuelManager.java
@@ -110,7 +110,7 @@ public final class DuelManager
public void removeDuel(Duel duel)
{
- _duels.remove(duel);
+ _duels.remove(duel.getId());
}
public void doSurrender(L2PcInstance player)
diff --git a/trunk/java/com/l2jserver/gameserver/model/AutoSpawnHandler.java b/trunk/java/com/l2jserver/gameserver/model/AutoSpawnHandler.java
index 137e970542..25c7cbd7ee 100644
--- a/trunk/java/com/l2jserver/gameserver/model/AutoSpawnHandler.java
+++ b/trunk/java/com/l2jserver/gameserver/model/AutoSpawnHandler.java
@@ -26,7 +26,9 @@ import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
+import java.util.Queue;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -552,11 +554,6 @@ public class AutoSpawnHandler
for (L2Npc npcInst : spawnInst.getNPCInstanceList())
{
- if (npcInst == null)
- {
- continue;
- }
-
npcInst.deleteMe();
SpawnTable.getInstance().deleteSpawn(npcInst.getSpawn(), false);
spawnInst.removeNpcInstance(npcInst);
@@ -592,7 +589,7 @@ public class AutoSpawnHandler
protected int _lastLocIndex = -1;
- private final List _npcList = new CopyOnWriteArrayList<>();
+ private final Queue _npcList = new ConcurrentLinkedQueue<>();
private final List _locList = new CopyOnWriteArrayList<>();
@@ -665,16 +662,9 @@ public class AutoSpawnHandler
return _locList.toArray(new Location[_locList.size()]);
}
- public L2Npc[] getNPCInstanceList()
+ public Queue getNPCInstanceList()
{
- L2Npc[] ret;
- synchronized (_npcList)
- {
- ret = new L2Npc[_npcList.size()];
- _npcList.toArray(ret);
- }
-
- return ret;
+ return _npcList;
}
public List getSpawns()
diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java
index a9ca5d8d09..a76c55540a 100644
--- a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java
+++ b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2PetInstance.java
@@ -21,8 +21,6 @@ package com.l2jserver.gameserver.model.actor.instance;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Future;
@@ -35,7 +33,6 @@ import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.ai.CtrlIntention;
import com.l2jserver.gameserver.data.sql.impl.CharSummonTable;
import com.l2jserver.gameserver.data.sql.impl.SummonEffectsTable;
-import com.l2jserver.gameserver.data.sql.impl.SummonEffectsTable.SummonEffect;
import com.l2jserver.gameserver.data.xml.impl.PetDataTable;
import com.l2jserver.gameserver.datatables.ItemTable;
import com.l2jserver.gameserver.datatables.SkillData;
@@ -928,17 +925,7 @@ public class L2PetInstance extends L2Summon
public final void stopSkillEffects(boolean removed, int skillId)
{
super.stopSkillEffects(removed, skillId);
- List effects = SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId());
- if ((effects != null) && !effects.isEmpty())
- {
- for (SummonEffect effect : effects)
- {
- if (effect.getSkill().getId() == skillId)
- {
- SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).remove(effect);
- }
- }
- }
+ SummonEffectsTable.getInstance().removePetEffects(getControlObjectId(), skillId);
}
@Override
@@ -1013,7 +1000,7 @@ public class L2PetInstance extends L2Summon
}
// Clear list for overwrite
- SummonEffectsTable.getInstance().getPetEffects().getOrDefault(getControlObjectId(), Collections.emptyList()).clear();
+ SummonEffectsTable.getInstance().clearPetEffects(getControlObjectId());
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement ps1 = con.prepareStatement(DELETE_SKILL_SAVE);
@@ -1069,8 +1056,7 @@ public class L2PetInstance extends L2Summon
ps2.setInt(5, ++buff_index);
ps2.execute();
- SummonEffectsTable.getInstance().getPetEffects().putIfAbsent(getControlObjectId(), new ArrayList<>());
- SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, info.getTime()));
+ SummonEffectsTable.getInstance().addPetEffect(getControlObjectId(), skill, info.getTime());
}
}
}
@@ -1087,7 +1073,7 @@ public class L2PetInstance extends L2Summon
PreparedStatement ps1 = con.prepareStatement(RESTORE_SKILL_SAVE);
PreparedStatement ps2 = con.prepareStatement(DELETE_SKILL_SAVE))
{
- if (!SummonEffectsTable.getInstance().getPetEffects().containsKey(getControlObjectId()))
+ if (!SummonEffectsTable.getInstance().containsPetId(getControlObjectId()))
{
ps1.setInt(1, getControlObjectId());
try (ResultSet rset = ps1.executeQuery())
@@ -1104,12 +1090,7 @@ public class L2PetInstance extends L2Summon
if (skill.hasEffects(EffectScope.GENERAL))
{
- if (!SummonEffectsTable.getInstance().getPetEffects().containsKey(getControlObjectId()))
- {
- SummonEffectsTable.getInstance().getPetEffects().put(getControlObjectId(), new ArrayList<>());
- }
-
- SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, effectCurTime));
+ SummonEffectsTable.getInstance().addPetEffect(getControlObjectId(), skill, effectCurTime);
}
}
}
@@ -1124,18 +1105,7 @@ public class L2PetInstance extends L2Summon
}
finally
{
- if (SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()) == null)
- {
- return;
- }
-
- for (SummonEffect se : SummonEffectsTable.getInstance().getPetEffects().get(getControlObjectId()))
- {
- if (se != null)
- {
- se.getSkill().applyEffects(this, this, false, se.getEffectCurTime());
- }
- }
+ SummonEffectsTable.getInstance().applyPetEffects(this, getControlObjectId());
}
}
diff --git a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2ServitorInstance.java b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2ServitorInstance.java
index 2806eae2d6..866b2fa8b8 100644
--- a/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2ServitorInstance.java
+++ b/trunk/java/com/l2jserver/gameserver/model/actor/instance/L2ServitorInstance.java
@@ -21,12 +21,8 @@ package com.l2jserver.gameserver.model.actor.instance;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
-import java.util.Collections;
-import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
-import java.util.Map;
-import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.Future;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -36,7 +32,6 @@ import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.data.sql.impl.CharSummonTable;
import com.l2jserver.gameserver.data.sql.impl.SummonEffectsTable;
-import com.l2jserver.gameserver.data.sql.impl.SummonEffectsTable.SummonEffect;
import com.l2jserver.gameserver.datatables.SkillData;
import com.l2jserver.gameserver.enums.InstanceType;
import com.l2jserver.gameserver.model.L2Object;
@@ -231,22 +226,7 @@ public class L2ServitorInstance extends L2Summon implements Runnable
public final void stopSkillEffects(boolean removed, int skillId)
{
super.stopSkillEffects(removed, skillId);
- final Map> servitorEffects = SummonEffectsTable.getInstance().getServitorEffects(getOwner());
- if (servitorEffects != null)
- {
- final List effects = servitorEffects.get(getReferenceSkill());
- if ((effects != null) && !effects.isEmpty())
- {
- for (SummonEffect effect : effects)
- {
- final Skill skill = effect.getSkill();
- if ((skill != null) && (skill.getId() == skillId))
- {
- effects.remove(effect);
- }
- }
- }
- }
+ SummonEffectsTable.getInstance().removeServitorEffects(getOwner(), getReferenceSkill(), skillId);
}
@Override
@@ -277,10 +257,7 @@ public class L2ServitorInstance extends L2Summon implements Runnable
}
// Clear list for overwrite
- if (SummonEffectsTable.getInstance().getServitorEffectsOwner().getOrDefault(getOwner().getObjectId(), Collections.emptyMap()).containsKey(getOwner().getClassIndex()))
- {
- SummonEffectsTable.getInstance().getServitorEffects(getOwner()).getOrDefault(getReferenceSkill(), Collections.emptyList()).clear();
- }
+ SummonEffectsTable.getInstance().clearServitorEffects(getOwner(), getReferenceSkill());
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
PreparedStatement statement = con.prepareStatement(DELETE_SKILL_SAVE))
@@ -341,21 +318,7 @@ public class L2ServitorInstance extends L2Summon implements Runnable
ps2.setInt(7, ++buff_index);
ps2.execute();
- // XXX: Rework me!
- if (!SummonEffectsTable.getInstance().getServitorEffectsOwner().containsKey(getOwner().getObjectId()))
- {
- SummonEffectsTable.getInstance().getServitorEffectsOwner().put(getOwner().getObjectId(), new HashMap>>());
- }
- if (!SummonEffectsTable.getInstance().getServitorEffectsOwner().get(getOwner().getObjectId()).containsKey(getOwner().getClassIndex()))
- {
- SummonEffectsTable.getInstance().getServitorEffectsOwner().get(getOwner().getObjectId()).put(getOwner().getClassIndex(), new HashMap>());
- }
- if (!SummonEffectsTable.getInstance().getServitorEffects(getOwner()).containsKey(getReferenceSkill()))
- {
- SummonEffectsTable.getInstance().getServitorEffects(getOwner()).put(getReferenceSkill(), new CopyOnWriteArrayList());
- }
-
- SummonEffectsTable.getInstance().getServitorEffects(getOwner()).get(getReferenceSkill()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, info.getTime()));
+ SummonEffectsTable.getInstance().addServitorEffect(getOwner(), getReferenceSkill(), skill, info.getTime());
}
}
}
@@ -376,7 +339,7 @@ public class L2ServitorInstance extends L2Summon implements Runnable
try (Connection con = L2DatabaseFactory.getInstance().getConnection())
{
- if (!SummonEffectsTable.getInstance().getServitorEffectsOwner().containsKey(getOwner().getObjectId()) || !SummonEffectsTable.getInstance().getServitorEffectsOwner().get(getOwner().getObjectId()).containsKey(getOwner().getClassIndex()) || !SummonEffectsTable.getInstance().getServitorEffects(getOwner()).containsKey(getReferenceSkill()))
+ if (!SummonEffectsTable.getInstance().containsSkill(getOwner(), getReferenceSkill()))
{
try (PreparedStatement statement = con.prepareStatement(RESTORE_SKILL_SAVE))
{
@@ -395,23 +358,9 @@ public class L2ServitorInstance extends L2Summon implements Runnable
continue;
}
- // XXX: Rework me!
if (skill.hasEffects(EffectScope.GENERAL))
{
- if (!SummonEffectsTable.getInstance().getServitorEffectsOwner().containsKey(getOwner().getObjectId()))
- {
- SummonEffectsTable.getInstance().getServitorEffectsOwner().put(getOwner().getObjectId(), new HashMap>>());
- }
- if (!SummonEffectsTable.getInstance().getServitorEffectsOwner().get(getOwner().getObjectId()).containsKey(getOwner().getClassIndex()))
- {
- SummonEffectsTable.getInstance().getServitorEffectsOwner().get(getOwner().getObjectId()).put(getOwner().getClassIndex(), new HashMap>());
- }
- if (!SummonEffectsTable.getInstance().getServitorEffects(getOwner()).containsKey(getReferenceSkill()))
- {
- SummonEffectsTable.getInstance().getServitorEffects(getOwner()).put(getReferenceSkill(), new CopyOnWriteArrayList());
- }
-
- SummonEffectsTable.getInstance().getServitorEffects(getOwner()).get(getReferenceSkill()).add(SummonEffectsTable.getInstance().new SummonEffect(skill, effectCurTime));
+ SummonEffectsTable.getInstance().addServitorEffect(getOwner(), getReferenceSkill(), skill, effectCurTime);
}
}
}
@@ -432,18 +381,7 @@ public class L2ServitorInstance extends L2Summon implements Runnable
}
finally
{
- if (!SummonEffectsTable.getInstance().getServitorEffectsOwner().containsKey(getOwner().getObjectId()) || !SummonEffectsTable.getInstance().getServitorEffectsOwner().get(getOwner().getObjectId()).containsKey(getOwner().getClassIndex()) || !SummonEffectsTable.getInstance().getServitorEffects(getOwner()).containsKey(getReferenceSkill()))
- {
- return;
- }
-
- for (SummonEffect se : SummonEffectsTable.getInstance().getServitorEffects(getOwner()).get(getReferenceSkill()))
- {
- if (se != null)
- {
- se.getSkill().applyEffects(this, this, false, se.getEffectCurTime());
- }
- }
+ SummonEffectsTable.getInstance().applyServitorEffects(this, getOwner(), getReferenceSkill());
}
}
diff --git a/trunk/java/com/l2jserver/gameserver/model/events/EventDispatcher.java b/trunk/java/com/l2jserver/gameserver/model/events/EventDispatcher.java
index 130518f694..bb5961f447 100644
--- a/trunk/java/com/l2jserver/gameserver/model/events/EventDispatcher.java
+++ b/trunk/java/com/l2jserver/gameserver/model/events/EventDispatcher.java
@@ -160,13 +160,13 @@ public final class EventDispatcher
*/
private T notifyEventToMultipleContainers(IBaseEvent event, ListenersContainer[] containers, Class callbackClass)
{
+ if (event == null)
+ {
+ throw new NullPointerException("Event cannot be null!");
+ }
+
try
{
- if (event == null)
- {
- throw new NullPointerException("Event cannot be null!");
- }
-
T callback = null;
if (containers != null)
{
diff --git a/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestDuelStart.java b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestDuelStart.java
index 83562d0f80..eddae08fd6 100644
--- a/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestDuelStart.java
+++ b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestDuelStart.java
@@ -92,7 +92,7 @@ public final class RequestDuelStart extends L2GameClientPacket
if (_partyDuel == 1)
{
// Player must be in a party & the party leader
- if (!activeChar.isInParty() || !(activeChar.isInParty() && activeChar.getParty().isLeader(activeChar)))
+ if (!activeChar.isInParty() || !activeChar.getParty().isLeader(activeChar))
{
activeChar.sendMessage("You have to be the leader of a party in order to request a party duel.");
return;
diff --git a/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestSetCastleSiegeTime.java b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestSetCastleSiegeTime.java
index 712f603311..3c03fdad66 100644
--- a/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestSetCastleSiegeTime.java
+++ b/trunk/java/com/l2jserver/gameserver/network/clientpackets/RequestSetCastleSiegeTime.java
@@ -67,7 +67,7 @@ public class RequestSetCastleSiegeTime extends L2GameClientPacket
_log.log(Level.WARNING, getType() + ": activeChar: " + activeChar + " castle: " + castle + " castleId: " + _castleId + " is trying to change siege date but is not clan leader!");
return;
}
- else if (!castle.getIsTimeRegistrationOver() && !castle.getIsTimeRegistrationOver())
+ else if (!castle.getIsTimeRegistrationOver())
{
if (isSiegeTimeValid(castle.getSiegeDate().getTimeInMillis(), _time))
{
diff --git a/trunk/java/com/l2jserver/gameserver/pathfinding/cellnodes/CellPathFinding.java b/trunk/java/com/l2jserver/gameserver/pathfinding/cellnodes/CellPathFinding.java
index 01fa2812a4..719f57283b 100644
--- a/trunk/java/com/l2jserver/gameserver/pathfinding/cellnodes/CellPathFinding.java
+++ b/trunk/java/com/l2jserver/gameserver/pathfinding/cellnodes/CellPathFinding.java
@@ -19,9 +19,8 @@
package com.l2jserver.gameserver.pathfinding.cellnodes;
import java.util.ArrayList;
-import java.util.LinkedList;
+import java.util.Iterator;
import java.util.List;
-import java.util.ListIterator;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
@@ -186,8 +185,6 @@ public class CellPathFinding extends PathFinding
_postFilterPlayableUses++;
}
- int currentX, currentY, currentZ;
- ListIterator middlePoint, endPoint;
boolean remove;
int pass = 0;
do
@@ -196,19 +193,18 @@ public class CellPathFinding extends PathFinding
_postFilterPasses++;
remove = false;
- middlePoint = path.listIterator();
- endPoint = path.listIterator(1);
- currentX = x;
- currentY = y;
- currentZ = z;
+ final Iterator endPoint = path.iterator();
+ int currentX = x;
+ int currentY = y;
+ int currentZ = z;
- while (endPoint.hasNext())
+ for (int i = 0; i < path.size(); i++)
{
+ AbstractNodeLoc locMiddle = path.get(i);
AbstractNodeLoc locEnd = endPoint.next();
- AbstractNodeLoc locMiddle = middlePoint.next();
if (GeoData.getInstance().canMove(currentX, currentY, currentZ, locEnd.getX(), locEnd.getY(), locEnd.getZ(), instanceId))
{
- middlePoint.remove();
+ path.remove(i);
remove = true;
if (debug)
{
@@ -228,11 +224,7 @@ public class CellPathFinding extends PathFinding
if (debug)
{
- middlePoint = path.listIterator();
- while (middlePoint.hasNext())
- {
- dropDebugItem(65, 1, middlePoint.next());
- }
+ path.forEach(n -> dropDebugItem(65, 1, n));
}
_findSuccess++;
@@ -242,7 +234,7 @@ public class CellPathFinding extends PathFinding
private List constructPath(AbstractNode node)
{
- final LinkedList path = new LinkedList<>();
+ final List path = new CopyOnWriteArrayList<>();
int previousDirectionX = Integer.MIN_VALUE;
int previousDirectionY = Integer.MIN_VALUE;
int directionX, directionY;
@@ -276,7 +268,7 @@ public class CellPathFinding extends PathFinding
previousDirectionX = directionX;
previousDirectionY = directionY;
- path.addFirst(node.getLoc());
+ path.add(0, node.getLoc());
node.setLoc(null);
}
@@ -349,7 +341,7 @@ public class CellPathFinding extends PathFinding
{
final int mapSize;
final int count;
- ArrayList bufs;
+ List bufs;
int uses = 0;
int playableUses = 0;
int overflows = 0;
diff --git a/trunk/java/com/l2jserver/gameserver/script/faenor/FaenorScriptEngine.java b/trunk/java/com/l2jserver/gameserver/script/faenor/FaenorScriptEngine.java
index af861ba799..7daabd8d3e 100644
--- a/trunk/java/com/l2jserver/gameserver/script/faenor/FaenorScriptEngine.java
+++ b/trunk/java/com/l2jserver/gameserver/script/faenor/FaenorScriptEngine.java
@@ -48,15 +48,18 @@ public class FaenorScriptEngine extends ScriptEngine
{
final File packDirectory = new File(Config.DATAPACK_ROOT, PACKAGE_DIRECTORY);
final File[] files = packDirectory.listFiles(new XMLFilter());
- for (File file : files)
+ if (files != null)
{
- try (InputStream in = new FileInputStream(file))
+ for (File file : files)
{
- parseScript(new ScriptDocument(file.getName(), in), null);
- }
- catch (IOException e)
- {
- _log.log(Level.WARNING, e.getMessage(), e);
+ try (InputStream in = new FileInputStream(file))
+ {
+ parseScript(new ScriptDocument(file.getName(), in), null);
+ }
+ catch (IOException e)
+ {
+ _log.log(Level.WARNING, e.getMessage(), e);
+ }
}
}
}
diff --git a/trunk/java/com/l2jserver/gameserver/scripting/L2ScriptEngineManager.java b/trunk/java/com/l2jserver/gameserver/scripting/L2ScriptEngineManager.java
index b3ed6acd99..7f7b01bd62 100644
--- a/trunk/java/com/l2jserver/gameserver/scripting/L2ScriptEngineManager.java
+++ b/trunk/java/com/l2jserver/gameserver/scripting/L2ScriptEngineManager.java
@@ -195,7 +195,13 @@ public final class L2ScriptEngineManager
{
if (dir.isDirectory())
{
- for (File file : dir.listFiles())
+ final File[] files = dir.listFiles();
+ if (files == null)
+ {
+ return;
+ }
+
+ for (File file : files)
{
if (file.isDirectory() && recurseDown && (maxDepth > currentDepth))
{
diff --git a/trunk/java/com/l2jserver/loginserver/LoginController.java b/trunk/java/com/l2jserver/loginserver/LoginController.java
index c37e904e38..e27326aef5 100644
--- a/trunk/java/com/l2jserver/loginserver/LoginController.java
+++ b/trunk/java/com/l2jserver/loginserver/LoginController.java
@@ -327,21 +327,21 @@ public class LoginController
_bannedIps.putIfAbsent(address, System.currentTimeMillis() + duration);
}
- public boolean isBannedAddress(InetAddress address)
+ public boolean isBannedAddress(InetAddress address) throws UnknownHostException
{
String[] parts = address.getHostAddress().split("\\.");
Long bi = _bannedIps.get(address);
if (bi == null)
{
- bi = _bannedIps.get(parts[0] + "." + parts[1] + "." + parts[2] + ".0");
+ bi = _bannedIps.get(InetAddress.getByName(parts[0] + "." + parts[1] + "." + parts[2] + ".0"));
}
if (bi == null)
{
- bi = _bannedIps.get(parts[0] + "." + parts[1] + ".0.0");
+ bi = _bannedIps.get(InetAddress.getByName(parts[0] + "." + parts[1] + ".0.0"));
}
if (bi == null)
{
- bi = _bannedIps.get(parts[0] + ".0.0.0");
+ bi = _bannedIps.get(InetAddress.getByName(parts[0] + ".0.0.0"));
}
if (bi != null)
{
@@ -368,7 +368,7 @@ public class LoginController
*/
public boolean removeBanForAddress(InetAddress address)
{
- return _bannedIps.remove(address.getHostAddress()) != null;
+ return _bannedIps.remove(address) != null;
}
/**
diff --git a/trunk/java/com/l2jserver/loginserver/SelectorHelper.java b/trunk/java/com/l2jserver/loginserver/SelectorHelper.java
index 5fe73d8f5f..09cf0510a9 100644
--- a/trunk/java/com/l2jserver/loginserver/SelectorHelper.java
+++ b/trunk/java/com/l2jserver/loginserver/SelectorHelper.java
@@ -18,10 +18,12 @@
*/
package com.l2jserver.loginserver;
+import java.net.UnknownHostException;
import java.nio.channels.SocketChannel;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import java.util.logging.Logger;
import commons.mmocore.IAcceptFilter;
import commons.mmocore.IClientFactory;
@@ -38,6 +40,7 @@ import com.l2jserver.util.IPv4Filter;
*/
public class SelectorHelper implements IMMOExecutor, IClientFactory, IAcceptFilter
{
+ private static final Logger LOG = Logger.getLogger(LoginController.class.getName());
private final ThreadPoolExecutor _generalPacketsThreadPool;
private final IPv4Filter _ipv4filter;
@@ -64,6 +67,14 @@ public class SelectorHelper implements IMMOExecutor, IClientFacto
@Override
public boolean accept(SocketChannel sc)
{
- return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
+ try
+ {
+ return _ipv4filter.accept(sc) && !LoginController.getInstance().isBannedAddress(sc.socket().getInetAddress());
+ }
+ catch (UnknownHostException e)
+ {
+ LOG.severe(SelectorHelper.class.getSimpleName() + ": Invalid address: " + sc.socket().getInetAddress() + "; " + e.getMessage());
+ }
+ return false;
}
}
diff --git a/trunk/java/com/l2jserver/status/GameStatusThread.java b/trunk/java/com/l2jserver/status/GameStatusThread.java
index 24f3354cfb..7c11881a1d 100644
--- a/trunk/java/com/l2jserver/status/GameStatusThread.java
+++ b/trunk/java/com/l2jserver/status/GameStatusThread.java
@@ -34,7 +34,7 @@ import com.l2jserver.Config;
import com.l2jserver.gameserver.handler.ITelnetHandler;
import com.l2jserver.gameserver.handler.TelnetHandler;
-public class GameStatusThread extends Thread
+public final class GameStatusThread extends Thread
{
private static final Logger _log = Logger.getLogger(GameStatusThread.class.getName());
diff --git a/trunk/java/com/l2jserver/status/LoginStatusThread.java b/trunk/java/com/l2jserver/status/LoginStatusThread.java
index 6063aff9ca..73b9067683 100644
--- a/trunk/java/com/l2jserver/status/LoginStatusThread.java
+++ b/trunk/java/com/l2jserver/status/LoginStatusThread.java
@@ -37,7 +37,7 @@ import com.l2jserver.loginserver.GameServerTable.GameServerInfo;
import com.l2jserver.loginserver.L2LoginServer;
import com.l2jserver.loginserver.LoginController;
-public class LoginStatusThread extends Thread
+public final class LoginStatusThread extends Thread
{
private static final Logger _log = Logger.getLogger(LoginStatusThread.class.getName());
diff --git a/trunk/java/com/l2jserver/util/data/xml/IXmlReader.java b/trunk/java/com/l2jserver/util/data/xml/IXmlReader.java
index c42868664f..25c83c2a12 100644
--- a/trunk/java/com/l2jserver/util/data/xml/IXmlReader.java
+++ b/trunk/java/com/l2jserver/util/data/xml/IXmlReader.java
@@ -144,16 +144,19 @@ public interface IXmlReader
return false;
}
- final File[] listOfFiles = dir.listFiles();
- for (File f : listOfFiles)
+ final File[] files = dir.listFiles();
+ if (files != null)
{
- if (recursive && f.isDirectory())
+ for (File f : files)
{
- parseDirectory(f, recursive);
- }
- else if (getCurrentFileFilter().accept(f))
- {
- parseFile(f);
+ if (recursive && f.isDirectory())
+ {
+ parseDirectory(f, recursive);
+ }
+ else if (getCurrentFileFilter().accept(f))
+ {
+ parseFile(f);
+ }
}
}
return true;