· 10 years ago · Aug 25, 2016, 04:04 PM
1Index: GameServer/java/net/sf/l2j/geodataconverter/GeoDataConverter.java
2===================================================================
3--- GameServer/java/net/sf/l2j/geodataconverter/GeoDataConverter.java (révision 553)
4+++ GameServer/java/net/sf/l2j/geodataconverter/GeoDataConverter.java (révision 568)
5@@ -31,7 +31,7 @@
6 import net.sf.l2j.gameserver.geoengine.geodata.BlockMultilayer;
7 import net.sf.l2j.gameserver.geoengine.geodata.GeoFormat;
8 import net.sf.l2j.gameserver.geoengine.geodata.GeoStructure;
9-import net.sf.l2j.gameserver.model.L2World;
10+import net.sf.l2j.gameserver.model.World;
11
12 /**
13 * @author Hasha
14@@ -77,9 +77,9 @@
15 // load geo files according to geoengine config setup
16 final ExProperties props = Config.initProperties(Config.GEOENGINE_FILE);
17 int converted = 0;
18- for (int rx = L2World.TILE_X_MIN; rx <= L2World.TILE_X_MAX; rx++)
19+ for (int rx = World.TILE_X_MIN; rx <= World.TILE_X_MAX; rx++)
20 {
21- for (int ry = L2World.TILE_Y_MIN; ry <= L2World.TILE_Y_MAX; ry++)
22+ for (int ry = World.TILE_Y_MIN; ry <= World.TILE_Y_MAX; ry++)
23 {
24 if (props.containsKey(String.valueOf(rx) + "_" + String.valueOf(ry)))
25 {
26Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPetGetItem.java
27===================================================================
28--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPetGetItem.java (révision 553)
29+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPetGetItem.java (révision 568)
30@@ -16,7 +16,7 @@
31
32 import net.sf.l2j.gameserver.ai.CtrlIntention;
33 import net.sf.l2j.gameserver.model.L2Object;
34-import net.sf.l2j.gameserver.model.L2World;
35+import net.sf.l2j.gameserver.model.World;
36 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
37 import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
38 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
39@@ -38,7 +38,7 @@
40 if (activeChar == null || !activeChar.hasPet())
41 return;
42
43- final L2Object item = L2World.getInstance().getObject(_objectId);
44+ final L2Object item = World.getInstance().getObject(_objectId);
45 if (item == null)
46 return;
47
48Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java
49===================================================================
50--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java (révision 553)
51+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreBuy.java (révision 568)
52@@ -19,7 +19,7 @@
53
54 import net.sf.l2j.Config;
55 import net.sf.l2j.gameserver.model.ItemRequest;
56-import net.sf.l2j.gameserver.model.L2World;
57+import net.sf.l2j.gameserver.model.World;
58 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
59 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.StoreType;
60 import net.sf.l2j.gameserver.model.tradelist.TradeList;
61@@ -69,7 +69,7 @@
62 if (_items == null)
63 return;
64
65- L2PcInstance storePlayer = L2World.getInstance().getPlayer(_storePlayerId);
66+ L2PcInstance storePlayer = World.getInstance().getPlayer(_storePlayerId);
67 if (storePlayer == null)
68 return;
69
70Index: GameServer/java/net/sf/l2j/gameserver/network/L2GameClient.java
71===================================================================
72--- GameServer/java/net/sf/l2j/gameserver/network/L2GameClient.java (révision 553)
73+++ GameServer/java/net/sf/l2j/gameserver/network/L2GameClient.java (révision 568)
74@@ -40,7 +40,7 @@
75 import net.sf.l2j.gameserver.datatables.ClanTable;
76 import net.sf.l2j.gameserver.model.CharSelectInfoPackage;
77 import net.sf.l2j.gameserver.model.L2Clan;
78-import net.sf.l2j.gameserver.model.L2World;
79+import net.sf.l2j.gameserver.model.World;
80 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
81 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
82 import net.sf.l2j.gameserver.network.serverpackets.L2GameServerPacket;
83@@ -401,7 +401,7 @@
84 if (objId < 0)
85 return null;
86
87- L2PcInstance character = L2World.getInstance().getPlayer(objId);
88+ L2PcInstance character = World.getInstance().getPlayer(objId);
89 if (character != null)
90 {
91 // exploit prevention, should not happens in normal way
92Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExMPCCShowPartyMembersInfo.java
93===================================================================
94--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExMPCCShowPartyMembersInfo.java (révision 553)
95+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExMPCCShowPartyMembersInfo.java (révision 568)
96@@ -14,7 +14,7 @@
97 */
98 package net.sf.l2j.gameserver.network.clientpackets;
99
100-import net.sf.l2j.gameserver.model.L2World;
101+import net.sf.l2j.gameserver.model.World;
102 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
103 import net.sf.l2j.gameserver.network.serverpackets.ExMPCCShowPartyMemberInfo;
104
105@@ -39,7 +39,7 @@
106 if (activeChar == null)
107 return;
108
109- L2PcInstance player = L2World.getInstance().getPlayer(_partyLeaderId);
110+ L2PcInstance player = World.getInstance().getPlayer(_partyLeaderId);
111 if (player != null && player.isInParty())
112 activeChar.sendPacket(new ExMPCCShowPartyMemberInfo(player.getParty()));
113 }
114Index: GameServer/java/net/sf/l2j/gameserver/network/serverpackets/FriendStatus.java
115===================================================================
116--- GameServer/java/net/sf/l2j/gameserver/network/serverpackets/FriendStatus.java (révision 553)
117+++ GameServer/java/net/sf/l2j/gameserver/network/serverpackets/FriendStatus.java (révision 568)
118@@ -13,7 +13,7 @@
119 package net.sf.l2j.gameserver.network.serverpackets;
120
121 import net.sf.l2j.gameserver.datatables.CharNameTable;
122-import net.sf.l2j.gameserver.model.L2World;
123+import net.sf.l2j.gameserver.model.World;
124
125 /**
126 * Support for "Chat with Friends" dialog. <BR>
127@@ -34,7 +34,7 @@
128 {
129 _objid = objId;
130 _name = CharNameTable.getInstance().getPlayerName(objId);
131- _online = L2World.getInstance().getPlayer(objId) != null;
132+ _online = World.getInstance().getPlayer(objId) != null;
133 }
134
135 @Override
136Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendDel.java
137===================================================================
138--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendDel.java (révision 553)
139+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendDel.java (révision 568)
140@@ -20,7 +20,7 @@
141
142 import net.sf.l2j.L2DatabaseFactory;
143 import net.sf.l2j.gameserver.datatables.CharNameTable;
144-import net.sf.l2j.gameserver.model.L2World;
145+import net.sf.l2j.gameserver.model.World;
146 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
147 import net.sf.l2j.gameserver.network.SystemMessageId;
148 import net.sf.l2j.gameserver.network.serverpackets.FriendList;
149@@ -67,7 +67,7 @@
150 activeChar.getFriendList().remove(Integer.valueOf(id));
151 activeChar.sendPacket(new FriendList(activeChar)); // update friendList *heavy method*
152
153- L2PcInstance player = L2World.getInstance().getPlayer(_name);
154+ L2PcInstance player = World.getInstance().getPlayer(_name);
155 if (player != null)
156 {
157 player.getFriendList().remove(Integer.valueOf(activeChar.getObjectId()));
158Index: GameServer/java/net/sf/l2j/gameserver/network/serverpackets/RecipeShopManageList.java
159===================================================================
160--- GameServer/java/net/sf/l2j/gameserver/network/serverpackets/RecipeShopManageList.java (révision 553)
161+++ GameServer/java/net/sf/l2j/gameserver/network/serverpackets/RecipeShopManageList.java (révision 568)
162@@ -72,7 +72,7 @@
163 for (RecipeList recipe : _recipes)
164 {
165 writeD(recipe.getId());
166- writeD(i + 1);
167+ writeD(++i);
168 }
169 }
170
171Index: GameServer/java/net/sf/l2j/gameserver/ai/model/L2AttackableAI.java
172===================================================================
173--- GameServer/java/net/sf/l2j/gameserver/ai/model/L2AttackableAI.java (révision 553)
174+++ GameServer/java/net/sf/l2j/gameserver/ai/model/L2AttackableAI.java (révision 568)
175@@ -425,7 +425,7 @@
176 else
177 {
178 // Return to home if too far.
179- if (npc.returnHome())
180+ if (npc.returnHome(false))
181 return;
182
183 // Random walk otherwise.
184Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java
185===================================================================
186--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (révision 553)
187+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestBypassToServer.java (révision 568)
188@@ -23,7 +23,7 @@
189 import net.sf.l2j.gameserver.handler.AdminCommandHandler;
190 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
191 import net.sf.l2j.gameserver.model.L2Object;
192-import net.sf.l2j.gameserver.model.L2World;
193+import net.sf.l2j.gameserver.model.World;
194 import net.sf.l2j.gameserver.model.actor.L2Npc;
195 import net.sf.l2j.gameserver.model.actor.instance.L2OlympiadManagerInstance;
196 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
197@@ -109,7 +109,7 @@
198
199 try
200 {
201- final L2Object object = L2World.getInstance().getObject(Integer.parseInt(id));
202+ final L2Object object = World.getInstance().getObject(Integer.parseInt(id));
203
204 if (object != null && object instanceof L2Npc && endOfId > 0 && ((L2Npc) object).canInteract(activeChar))
205 ((L2Npc) object).onBypassFeedback(activeChar, _command.substring(endOfId + 1));
206Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerJoinPartyRoom.java
207===================================================================
208--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerJoinPartyRoom.java (révision 553)
209+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerJoinPartyRoom.java (révision 568)
210@@ -14,7 +14,7 @@
211 */
212 package net.sf.l2j.gameserver.network.clientpackets;
213
214-import net.sf.l2j.gameserver.model.L2World;
215+import net.sf.l2j.gameserver.model.World;
216 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
217 import net.sf.l2j.gameserver.model.partymatching.PartyMatchRoom;
218 import net.sf.l2j.gameserver.model.partymatching.PartyMatchRoomList;
219@@ -47,7 +47,7 @@
220 return;
221
222 final L2PcInstance partner = player.getActiveRequester();
223- if (partner == null || L2World.getInstance().getPlayer(partner.getObjectId()) == null)
224+ if (partner == null || World.getInstance().getPlayer(partner.getObjectId()) == null)
225 {
226 // Partner hasn't be found, cancel the invitation
227 player.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
228Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEvaluate.java
229===================================================================
230--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEvaluate.java (révision 553)
231+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEvaluate.java (révision 568)
232@@ -14,7 +14,7 @@
233 */
234 package net.sf.l2j.gameserver.network.clientpackets;
235
236-import net.sf.l2j.gameserver.model.L2World;
237+import net.sf.l2j.gameserver.model.World;
238 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
239 import net.sf.l2j.gameserver.network.SystemMessageId;
240 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
241@@ -37,7 +37,7 @@
242 if (activeChar == null)
243 return;
244
245- final L2PcInstance target = L2World.getInstance().getPlayer(_targetId);
246+ final L2PcInstance target = World.getInstance().getPlayer(_targetId);
247 if (target == null)
248 {
249 activeChar.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
250Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExOustFromMPCC.java
251===================================================================
252--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExOustFromMPCC.java (révision 553)
253+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExOustFromMPCC.java (révision 568)
254@@ -15,7 +15,7 @@
255 package net.sf.l2j.gameserver.network.clientpackets;
256
257 import net.sf.l2j.gameserver.model.L2Party;
258-import net.sf.l2j.gameserver.model.L2World;
259+import net.sf.l2j.gameserver.model.World;
260 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
261 import net.sf.l2j.gameserver.network.SystemMessageId;
262 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
263@@ -40,7 +40,7 @@
264 if (activeChar == null)
265 return;
266
267- final L2PcInstance target = L2World.getInstance().getPlayer(_name);
268+ final L2PcInstance target = World.getInstance().getPlayer(_name);
269 if (target == null)
270 {
271 activeChar.sendPacket(SystemMessageId.TARGET_CANT_FOUND);
272Index: GameServer/java/net/sf/l2j/gameserver/network/serverpackets/FriendList.java
273===================================================================
274--- GameServer/java/net/sf/l2j/gameserver/network/serverpackets/FriendList.java (révision 553)
275+++ GameServer/java/net/sf/l2j/gameserver/network/serverpackets/FriendList.java (révision 568)
276@@ -18,7 +18,7 @@
277 import java.util.List;
278
279 import net.sf.l2j.gameserver.datatables.CharNameTable;
280-import net.sf.l2j.gameserver.model.L2World;
281+import net.sf.l2j.gameserver.model.World;
282 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
283
284 /**
285@@ -50,7 +50,7 @@
286 for (int objId : player.getFriendList())
287 {
288 final String name = CharNameTable.getInstance().getPlayerName(objId);
289- final L2PcInstance player1 = L2World.getInstance().getPlayer(objId);
290+ final L2PcInstance player1 = World.getInstance().getPlayer(objId);
291
292 _info.add(new FriendInfo(objId, name, (player1 != null && player1.isOnline())));
293 }
294Index: GameServer/java/net/sf/l2j/gameserver/network/serverpackets/ExRegenMax.java
295===================================================================
296--- GameServer/java/net/sf/l2j/gameserver/network/serverpackets/ExRegenMax.java (nonexistent)
297+++ GameServer/java/net/sf/l2j/gameserver/network/serverpackets/ExRegenMax.java (révision 568)
298@@ -0,0 +1,40 @@
299+/*
300+ * This program is free software: you can redistribute it and/or modify it under
301+ * the terms of the GNU General Public License as published by the Free Software
302+ * Foundation, either version 3 of the License, or (at your option) any later
303+ * version.
304+ *
305+ * This program is distributed in the hope that it will be useful, but WITHOUT
306+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
307+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
308+ * details.
309+ *
310+ * You should have received a copy of the GNU General Public License along with
311+ * this program. If not, see <http://www.gnu.org/licenses/>.
312+ */
313+package net.sf.l2j.gameserver.network.serverpackets;
314+
315+public final class ExRegenMax extends L2GameServerPacket
316+{
317+ private final int _count;
318+ private final int _time;
319+ private final double _hpRegen;
320+
321+ public ExRegenMax(int count, int time, double hpRegen)
322+ {
323+ _count = count;
324+ _time = time;
325+ _hpRegen = hpRegen * 0.66;
326+ }
327+
328+ @Override
329+ protected void writeImpl()
330+ {
331+ writeC(0xFE);
332+ writeH(0x01);
333+ writeD(1);
334+ writeD(_count);
335+ writeD(_time);
336+ writeF(_hpRegen);
337+ }
338+}
339\ No newline at end of file
340Index: GameServer/java/net/sf/l2j/gameserver/ai/model/L2SiegeGuardAI.java
341===================================================================
342--- GameServer/java/net/sf/l2j/gameserver/ai/model/L2SiegeGuardAI.java (révision 553)
343+++ GameServer/java/net/sf/l2j/gameserver/ai/model/L2SiegeGuardAI.java (révision 568)
344@@ -176,7 +176,7 @@
345 }
346 }
347 // Order to the L2SiegeGuardInstance to return to its home location because there's no target to attack
348- getActiveChar().returnHome();
349+ getActiveChar().returnHome(true);
350 }
351
352 /**
353@@ -201,7 +201,7 @@
354 */
355 if (!actor.isInsideZone(ZoneId.SIEGE))
356 {
357- actor.returnHome();
358+ actor.returnHome(true);
359 return;
360 }
361
362Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/CharacterCreate.java
363===================================================================
364--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/CharacterCreate.java (révision 553)
365+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/CharacterCreate.java (révision 568)
366@@ -24,7 +24,7 @@
367 import net.sf.l2j.gameserver.idfactory.IdFactory;
368 import net.sf.l2j.gameserver.model.L2ShortCut;
369 import net.sf.l2j.gameserver.model.L2SkillLearn;
370-import net.sf.l2j.gameserver.model.L2World;
371+import net.sf.l2j.gameserver.model.World;
372 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
373 import net.sf.l2j.gameserver.model.actor.template.PcTemplate;
374 import net.sf.l2j.gameserver.model.base.Sex;
375@@ -132,7 +132,7 @@
376 // send acknowledgement
377 sendPacket(CharCreateOk.STATIC_PACKET);
378
379- L2World.getInstance().addObject(newChar);
380+ World.getInstance().addObject(newChar);
381
382 newChar.addAdena("Init", Config.STARTING_ADENA, null, false);
383 newChar.setXYZInvisible(template.getSpawnX(), template.getSpawnY(), template.getSpawnZ());
384Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinPledge.java
385===================================================================
386--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinPledge.java (révision 553)
387+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinPledge.java (révision 568)
388@@ -15,7 +15,7 @@
389 package net.sf.l2j.gameserver.network.clientpackets;
390
391 import net.sf.l2j.gameserver.model.L2Clan;
392-import net.sf.l2j.gameserver.model.L2World;
393+import net.sf.l2j.gameserver.model.World;
394 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
395 import net.sf.l2j.gameserver.network.SystemMessageId;
396 import net.sf.l2j.gameserver.network.serverpackets.AskJoinPledge;
397@@ -44,7 +44,7 @@
398 if (clan == null)
399 return;
400
401- final L2PcInstance target = L2World.getInstance().getPlayer(_target);
402+ final L2PcInstance target = World.getInstance().getPlayer(_target);
403 if (target == null)
404 {
405 activeChar.sendPacket(SystemMessageId.YOU_HAVE_INVITED_THE_WRONG_TARGET);
406Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinAlly.java
407===================================================================
408--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinAlly.java (révision 553)
409+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinAlly.java (révision 568)
410@@ -15,7 +15,7 @@
411 package net.sf.l2j.gameserver.network.clientpackets;
412
413 import net.sf.l2j.gameserver.model.L2Clan;
414-import net.sf.l2j.gameserver.model.L2World;
415+import net.sf.l2j.gameserver.model.World;
416 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
417 import net.sf.l2j.gameserver.network.SystemMessageId;
418 import net.sf.l2j.gameserver.network.serverpackets.AskJoinAlly;
419@@ -45,7 +45,7 @@
420 return;
421 }
422
423- final L2PcInstance target = L2World.getInstance().getPlayer(_id);
424+ final L2PcInstance target = World.getInstance().getPlayer(_id);
425 if (target == null)
426 {
427 activeChar.sendPacket(SystemMessageId.YOU_HAVE_INVITED_THE_WRONG_TARGET);
428Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendInvite.java
429===================================================================
430--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendInvite.java (révision 553)
431+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendInvite.java (révision 568)
432@@ -15,7 +15,7 @@
433 package net.sf.l2j.gameserver.network.clientpackets;
434
435 import net.sf.l2j.gameserver.model.BlockList;
436-import net.sf.l2j.gameserver.model.L2World;
437+import net.sf.l2j.gameserver.model.World;
438 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
439 import net.sf.l2j.gameserver.network.SystemMessageId;
440 import net.sf.l2j.gameserver.network.serverpackets.FriendAddRequest;
441@@ -38,7 +38,7 @@
442 if (activeChar == null)
443 return;
444
445- final L2PcInstance friend = L2World.getInstance().getPlayer(_name);
446+ final L2PcInstance friend = World.getInstance().getPlayer(_name);
447
448 // can't use friend invite for locating invisible characters
449 if (friend == null || !friend.isOnline() || friend.getAppearance().getInvisible())
450Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestOustFromPartyRoom.java
451===================================================================
452--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestOustFromPartyRoom.java (révision 553)
453+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestOustFromPartyRoom.java (révision 568)
454@@ -15,7 +15,7 @@
455 package net.sf.l2j.gameserver.network.clientpackets;
456
457 import net.sf.l2j.gameserver.datatables.MapRegionTable;
458-import net.sf.l2j.gameserver.model.L2World;
459+import net.sf.l2j.gameserver.model.World;
460 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
461 import net.sf.l2j.gameserver.model.partymatching.PartyMatchRoom;
462 import net.sf.l2j.gameserver.model.partymatching.PartyMatchRoomList;
463@@ -45,7 +45,7 @@
464 if (activeChar == null)
465 return;
466
467- final L2PcInstance member = L2World.getInstance().getPlayer(_charid);
468+ final L2PcInstance member = World.getInstance().getPlayer(_charid);
469 if (member == null)
470 return;
471
472Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java
473===================================================================
474--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java (révision 553)
475+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestPrivateStoreSell.java (révision 568)
476@@ -16,7 +16,7 @@
477
478 import net.sf.l2j.Config;
479 import net.sf.l2j.gameserver.model.ItemRequest;
480-import net.sf.l2j.gameserver.model.L2World;
481+import net.sf.l2j.gameserver.model.World;
482 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
483 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.StoreType;
484 import net.sf.l2j.gameserver.model.tradelist.TradeList;
485@@ -67,7 +67,7 @@
486 if (_items == null)
487 return;
488
489- L2PcInstance storePlayer = L2World.getInstance().getPlayer(_storePlayerId);
490+ L2PcInstance storePlayer = World.getInstance().getPlayer(_storePlayerId);
491 if (storePlayer == null)
492 return;
493
494Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java
495===================================================================
496--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (révision 553)
497+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/EnterWorld.java (révision 568)
498@@ -17,6 +17,7 @@
499 import java.sql.Connection;
500 import java.sql.PreparedStatement;
501 import java.sql.ResultSet;
502+import java.util.Map.Entry;
503 import java.util.logging.Level;
504
505 import net.sf.l2j.Config;
506@@ -35,12 +36,12 @@
507 import net.sf.l2j.gameserver.instancemanager.SiegeManager;
508 import net.sf.l2j.gameserver.model.L2Clan;
509 import net.sf.l2j.gameserver.model.L2Clan.SubPledge;
510-import net.sf.l2j.gameserver.model.L2World;
511+import net.sf.l2j.gameserver.model.World;
512 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
513 import net.sf.l2j.gameserver.model.base.ClassRace;
514 import net.sf.l2j.gameserver.model.entity.ClanHall;
515-import net.sf.l2j.gameserver.model.entity.Couple;
516 import net.sf.l2j.gameserver.model.entity.Siege;
517+import net.sf.l2j.gameserver.model.holder.IntIntHolder;
518 import net.sf.l2j.gameserver.model.olympiad.Olympiad;
519 import net.sf.l2j.gameserver.model.zone.ZoneId;
520 import net.sf.l2j.gameserver.network.SystemMessageId;
521@@ -136,13 +137,13 @@
522 // Send a login notification to sponsor or apprentice, if logged.
523 if (activeChar.getSponsor() != 0)
524 {
525- final L2PcInstance sponsor = L2World.getInstance().getPlayer(activeChar.getSponsor());
526+ final L2PcInstance sponsor = World.getInstance().getPlayer(activeChar.getSponsor());
527 if (sponsor != null)
528 sponsor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOUR_APPRENTICE_S1_HAS_LOGGED_IN).addPcName(activeChar));
529 }
530 else if (activeChar.getApprentice() != 0)
531 {
532- final L2PcInstance apprentice = L2World.getInstance().getPlayer(activeChar.getApprentice());
533+ final L2PcInstance apprentice = World.getInstance().getPlayer(activeChar.getApprentice());
534 if (apprentice != null)
535 apprentice.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOUR_SPONSOR_S1_HAS_LOGGED_IN).addPcName(activeChar));
536 }
537@@ -198,14 +199,13 @@
538 // Engage and notify partner.
539 if (Config.ALLOW_WEDDING)
540 {
541- for (Couple cl : CoupleManager.getInstance().getCouples())
542+ for (Entry<Integer, IntIntHolder> coupleEntry : CoupleManager.getInstance().getCouples().entrySet())
543 {
544- if (cl.getPlayer1Id() == objectId || cl.getPlayer2Id() == objectId)
545+ final IntIntHolder couple = coupleEntry.getValue();
546+ if (couple.getId() == objectId || couple.getValue() == objectId)
547 {
548- if (cl.getMaried())
549- activeChar.setMarried(true);
550-
551- activeChar.setCoupleId(cl.getId());
552+ activeChar.setCoupleId(coupleEntry.getKey());
553+ break;
554 }
555 }
556 }
557@@ -227,6 +227,11 @@
558 activeChar.sendPacket(new ItemList(activeChar, false));
559 activeChar.sendPacket(new ShortCutInit(activeChar));
560 activeChar.sendPacket(new ExStorageMaxCount(activeChar));
561+
562+ // no broadcast needed since the player will already spawn dead to others
563+ if (activeChar.isAlikeDead())
564+ activeChar.sendPacket(new Die(activeChar));
565+
566 activeChar.updateEffectIcons();
567 activeChar.sendPacket(new EtcStatusUpdate(activeChar));
568 activeChar.sendSkillList();
569@@ -309,10 +314,6 @@
570
571 PetitionManager.getInstance().checkPetitionMessages(activeChar);
572
573- // no broadcast needed since the player will already spawn dead to others
574- if (activeChar.isAlikeDead())
575- sendPacket(new Die(activeChar));
576-
577 activeChar.onPlayerEnter();
578
579 sendPacket(new SkillCoolTime(activeChar));
580Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeItem.java
581===================================================================
582--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeItem.java (révision 553)
583+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeItem.java (révision 568)
584@@ -15,7 +15,7 @@
585 package net.sf.l2j.gameserver.network.clientpackets;
586
587 import net.sf.l2j.gameserver.datatables.RecipeTable;
588-import net.sf.l2j.gameserver.model.L2World;
589+import net.sf.l2j.gameserver.model.World;
590 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
591 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.StoreType;
592 import net.sf.l2j.gameserver.network.SystemMessageId;
593@@ -48,7 +48,7 @@
594 if (activeChar == null)
595 return;
596
597- final L2PcInstance manufacturer = L2World.getInstance().getPlayer(_id);
598+ final L2PcInstance manufacturer = World.getInstance().getPlayer(_id);
599 if (manufacturer == null)
600 return;
601
602Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestCrystallizeItem.java
603===================================================================
604--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestCrystallizeItem.java (révision 553)
605+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestCrystallizeItem.java (révision 568)
606@@ -15,7 +15,7 @@
607 package net.sf.l2j.gameserver.network.clientpackets;
608
609 import net.sf.l2j.gameserver.model.L2Skill;
610-import net.sf.l2j.gameserver.model.L2World;
611+import net.sf.l2j.gameserver.model.World;
612 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
613 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
614 import net.sf.l2j.gameserver.model.item.type.CrystalType;
615@@ -169,7 +169,7 @@
616 activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.EARNED_S2_S1_S).addItemName(createditem.getItemId()).addItemNumber(crystalAmount));
617
618 activeChar.broadcastUserInfo();
619- L2World.getInstance().removeObject(removedItem);
620+ World.getInstance().removeObject(removedItem);
621 activeChar.setCrystallizing(false);
622 }
623 }
624\ No newline at end of file
625Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java
626===================================================================
627--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java (révision 553)
628+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestMagicSkillUse.java (révision 568)
629@@ -85,6 +85,12 @@
630
631 if (activeChar.isAttackingNow())
632 {
633+ if (skill.isToggle())
634+ {
635+ activeChar.sendPacket(ActionFailed.STATIC_PACKET);
636+ return;
637+ }
638+
639 activeChar.getAI().setNextAction(new NextAction(CtrlEvent.EVT_READY_TO_ACT, CtrlIntention.CAST, new Runnable()
640 {
641 @Override
642Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestGMCommand.java
643===================================================================
644--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestGMCommand.java (révision 553)
645+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestGMCommand.java (révision 568)
646@@ -16,7 +16,7 @@
647
648 import net.sf.l2j.gameserver.datatables.ClanTable;
649 import net.sf.l2j.gameserver.model.L2Clan;
650-import net.sf.l2j.gameserver.model.L2World;
651+import net.sf.l2j.gameserver.model.World;
652 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
653 import net.sf.l2j.gameserver.network.serverpackets.GMViewCharacterInfo;
654 import net.sf.l2j.gameserver.network.serverpackets.GMViewHennaInfo;
655@@ -49,7 +49,7 @@
656 if (!activeChar.isGM() || !activeChar.getAccessLevel().allowAltG())
657 return;
658
659- final L2PcInstance target = L2World.getInstance().getPlayer(_targetName);
660+ final L2PcInstance target = World.getInstance().getPlayer(_targetName);
661 final L2Clan clan = ClanTable.getInstance().getClanByName(_targetName);
662
663 if (target == null && (clan == null || _command != 6))
664Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java
665===================================================================
666--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java (révision 553)
667+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestJoinParty.java (révision 568)
668@@ -17,7 +17,7 @@
669 import net.sf.l2j.Config;
670 import net.sf.l2j.gameserver.model.BlockList;
671 import net.sf.l2j.gameserver.model.L2Party;
672-import net.sf.l2j.gameserver.model.L2World;
673+import net.sf.l2j.gameserver.model.World;
674 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
675 import net.sf.l2j.gameserver.network.SystemMessageId;
676 import net.sf.l2j.gameserver.network.serverpackets.AskJoinParty;
677@@ -45,7 +45,7 @@
678 if (requestor == null)
679 return;
680
681- final L2PcInstance target = L2World.getInstance().getPlayer(_name);
682+ final L2PcInstance target = World.getInstance().getPlayer(_name);
683 if (target == null)
684 {
685 requestor.sendPacket(SystemMessageId.FIRST_SELECT_USER_TO_INVITE_TO_PARTY);
686Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerTradeRequest.java
687===================================================================
688--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerTradeRequest.java (révision 553)
689+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AnswerTradeRequest.java (révision 568)
690@@ -14,7 +14,7 @@
691 */
692 package net.sf.l2j.gameserver.network.clientpackets;
693
694-import net.sf.l2j.gameserver.model.L2World;
695+import net.sf.l2j.gameserver.model.World;
696 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
697 import net.sf.l2j.gameserver.network.SystemMessageId;
698 import net.sf.l2j.gameserver.network.serverpackets.SendTradeDone;
699@@ -44,7 +44,7 @@
700 }
701
702 final L2PcInstance partner = player.getActiveRequester();
703- if (partner == null || L2World.getInstance().getPlayer(partner.getObjectId()) == null)
704+ if (partner == null || World.getInstance().getPlayer(partner.getObjectId()) == null)
705 {
706 // Trade partner not found, cancel trade
707 player.sendPacket(new SendTradeDone(0));
708Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SnoopQuit.java
709===================================================================
710--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SnoopQuit.java (révision 553)
711+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/SnoopQuit.java (révision 568)
712@@ -14,7 +14,7 @@
713 */
714 package net.sf.l2j.gameserver.network.clientpackets;
715
716-import net.sf.l2j.gameserver.model.L2World;
717+import net.sf.l2j.gameserver.model.World;
718 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
719
720 /**
721@@ -37,7 +37,7 @@
722 if (activeChar == null)
723 return;
724
725- final L2PcInstance target = L2World.getInstance().getPlayer(_snoopID);
726+ final L2PcInstance target = World.getInstance().getPlayer(_snoopID);
727 if (target == null)
728 return;
729
730Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelStart.java
731===================================================================
732--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelStart.java (révision 553)
733+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestDuelStart.java (révision 568)
734@@ -16,7 +16,7 @@
735
736 import net.sf.l2j.gameserver.model.L2CommandChannel;
737 import net.sf.l2j.gameserver.model.L2Party;
738-import net.sf.l2j.gameserver.model.L2World;
739+import net.sf.l2j.gameserver.model.World;
740 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
741 import net.sf.l2j.gameserver.network.SystemMessageId;
742 import net.sf.l2j.gameserver.network.serverpackets.ExDuelAskStart;
743@@ -41,7 +41,7 @@
744 if (activeChar == null)
745 return;
746
747- final L2PcInstance targetChar = L2World.getInstance().getPlayer(_player);
748+ final L2PcInstance targetChar = World.getInstance().getPlayer(_player);
749 if (targetChar == null || activeChar == targetChar)
750 {
751 activeChar.sendPacket(SystemMessageId.THERE_IS_NO_OPPONENT_TO_RECEIVE_YOUR_CHALLENGE_FOR_A_DUEL);
752Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAskJoinPartyRoom.java
753===================================================================
754--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAskJoinPartyRoom.java (révision 553)
755+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestAskJoinPartyRoom.java (révision 568)
756@@ -14,7 +14,7 @@
757 */
758 package net.sf.l2j.gameserver.network.clientpackets;
759
760-import net.sf.l2j.gameserver.model.L2World;
761+import net.sf.l2j.gameserver.model.World;
762 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
763 import net.sf.l2j.gameserver.network.SystemMessageId;
764 import net.sf.l2j.gameserver.network.serverpackets.ExAskJoinPartyRoom;
765@@ -38,7 +38,7 @@
766 return;
767
768 // Send PartyRoom invite request (with activeChar) name to the target
769- final L2PcInstance target = L2World.getInstance().getPlayer(_name);
770+ final L2PcInstance target = World.getInstance().getPlayer(_name);
771 if (target != null)
772 {
773 if (!target.isProcessingRequest())
774Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSendFriendMsg.java
775===================================================================
776--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSendFriendMsg.java (révision 553)
777+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestSendFriendMsg.java (révision 568)
778@@ -19,7 +19,7 @@
779 import java.util.logging.Logger;
780
781 import net.sf.l2j.Config;
782-import net.sf.l2j.gameserver.model.L2World;
783+import net.sf.l2j.gameserver.model.World;
784 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
785 import net.sf.l2j.gameserver.network.SystemMessageId;
786 import net.sf.l2j.gameserver.network.serverpackets.L2FriendSay;
787@@ -52,7 +52,7 @@
788 if (activeChar == null)
789 return;
790
791- final L2PcInstance targetPlayer = L2World.getInstance().getPlayer(_reciever);
792+ final L2PcInstance targetPlayer = World.getInstance().getPlayer(_reciever);
793 if (targetPlayer == null || !targetPlayer.getFriendList().contains(activeChar.getObjectId()))
794 {
795 activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
796Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/TradeDone.java
797===================================================================
798--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/TradeDone.java (révision 553)
799+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/TradeDone.java (révision 568)
800@@ -14,7 +14,7 @@
801 */
802 package net.sf.l2j.gameserver.network.clientpackets;
803
804-import net.sf.l2j.gameserver.model.L2World;
805+import net.sf.l2j.gameserver.model.World;
806 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
807 import net.sf.l2j.gameserver.model.tradelist.TradeList;
808 import net.sf.l2j.gameserver.network.SystemMessageId;
809@@ -57,7 +57,7 @@
810
811 // Trade partner not found, cancel trade
812 final L2PcInstance partner = trade.getPartner();
813- if (partner == null || L2World.getInstance().getPlayer(partner.getObjectId()) == null)
814+ if (partner == null || World.getInstance().getPlayer(partner.getObjectId()) == null)
815 {
816 player.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
817 player.cancelActiveTrade();
818Index: GameServer/java/net/sf/l2j/gameserver/model/L2WorldRegion.java
819===================================================================
820--- GameServer/java/net/sf/l2j/gameserver/model/L2WorldRegion.java (révision 553)
821+++ GameServer/java/net/sf/l2j/gameserver/model/L2WorldRegion.java (nonexistent)
822@@ -1,398 +0,0 @@
823-/*
824- * This program is free software: you can redistribute it and/or modify it under
825- * the terms of the GNU General Public License as published by the Free Software
826- * Foundation, either version 3 of the License, or (at your option) any later
827- * version.
828- *
829- * This program is distributed in the hope that it will be useful, but WITHOUT
830- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
831- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
832- * details.
833- *
834- * You should have received a copy of the GNU General Public License along with
835- * this program. If not, see <http://www.gnu.org/licenses/>.
836- */
837-package net.sf.l2j.gameserver.model;
838-
839-import java.util.ArrayList;
840-import java.util.List;
841-import java.util.Map;
842-import java.util.concurrent.ConcurrentHashMap;
843-import java.util.concurrent.ScheduledFuture;
844-
845-import net.sf.l2j.commons.concurrent.ThreadPool;
846-
847-import net.sf.l2j.Config;
848-import net.sf.l2j.gameserver.ai.CtrlIntention;
849-import net.sf.l2j.gameserver.datatables.SpawnTable;
850-import net.sf.l2j.gameserver.model.actor.L2Attackable;
851-import net.sf.l2j.gameserver.model.actor.L2Character;
852-import net.sf.l2j.gameserver.model.actor.L2Npc;
853-import net.sf.l2j.gameserver.model.actor.L2Playable;
854-import net.sf.l2j.gameserver.model.actor.L2Vehicle;
855-import net.sf.l2j.gameserver.model.zone.L2ZoneType;
856-import net.sf.l2j.gameserver.model.zone.type.L2DerbyTrackZone;
857-import net.sf.l2j.gameserver.model.zone.type.L2PeaceZone;
858-import net.sf.l2j.gameserver.model.zone.type.L2TownZone;
859-
860-public final class L2WorldRegion
861-{
862- private final Map<Integer, L2Object> _visibleObjects = new ConcurrentHashMap<>();
863- private final Map<Integer, L2Playable> _allPlayable = new ConcurrentHashMap<>();
864-
865- private final List<L2WorldRegion> _surroundingRegions = new ArrayList<>();
866- private final List<L2ZoneType> _zones = new ArrayList<>();
867-
868- private final int _tileX, _tileY;
869-
870- private boolean _active;
871- private ScheduledFuture<?> _neighborsTask;
872-
873- public L2WorldRegion(int pTileX, int pTileY)
874- {
875- _tileX = pTileX;
876- _tileY = pTileY;
877-
878- _active = Config.GRIDS_ALWAYS_ON;
879- }
880-
881- public List<L2ZoneType> getZones()
882- {
883- return _zones;
884- }
885-
886- public void addZone(L2ZoneType zone)
887- {
888- _zones.add(zone);
889- }
890-
891- public void removeZone(L2ZoneType zone)
892- {
893- _zones.remove(zone);
894- }
895-
896- public void revalidateZones(L2Character character)
897- {
898- // Do NOT update the world region while the character is still in the process of teleporting
899- if (character.isTeleporting())
900- return;
901-
902- _zones.forEach(z -> z.revalidateInZone(character));
903- }
904-
905- public void removeFromZones(L2Character character)
906- {
907- _zones.forEach(z -> z.removeCharacter(character));
908- }
909-
910- public boolean containsZone(int zoneId)
911- {
912- for (L2ZoneType z : _zones)
913- {
914- if (z.getId() == zoneId)
915- return true;
916- }
917- return false;
918- }
919-
920- public boolean checkEffectRangeInsidePeaceZone(L2Skill skill, final int x, final int y, final int z)
921- {
922- final int range = skill.getEffectRange();
923- final int up = y + range;
924- final int down = y - range;
925- final int left = x + range;
926- final int right = x - range;
927-
928- for (L2ZoneType e : _zones)
929- {
930- if ((e instanceof L2TownZone && ((L2TownZone) e).isPeaceZone()) || e instanceof L2DerbyTrackZone || e instanceof L2PeaceZone)
931- {
932- if (e.isInsideZone(x, up, z))
933- return false;
934-
935- if (e.isInsideZone(x, down, z))
936- return false;
937-
938- if (e.isInsideZone(left, y, z))
939- return false;
940-
941- if (e.isInsideZone(right, y, z))
942- return false;
943-
944- if (e.isInsideZone(x, y, z))
945- return false;
946- }
947- }
948- return true;
949- }
950-
951- public void onDeath(L2Character character)
952- {
953- _zones.stream().filter(z -> z.isCharacterInZone(character)).forEach(z -> z.onDieInside(character));
954- }
955-
956- public void onRevive(L2Character character)
957- {
958- _zones.stream().filter(z -> z.isCharacterInZone(character)).forEach(z -> z.onReviveInside(character));
959- }
960-
961- /** Task of AI notification */
962- public class NeighborsTask implements Runnable
963- {
964- private final boolean _isActivating;
965-
966- public NeighborsTask(boolean isActivating)
967- {
968- _isActivating = isActivating;
969- }
970-
971- @Override
972- public void run()
973- {
974- if (_isActivating)
975- {
976- // for each neighbor, if it's not active, activate.
977- for (L2WorldRegion neighbor : getSurroundingRegions())
978- neighbor.setActive(true);
979- }
980- else
981- {
982- if (areNeighborsEmpty())
983- setActive(false);
984-
985- // check and deactivate
986- for (L2WorldRegion neighbor : getSurroundingRegions())
987- if (neighbor.areNeighborsEmpty())
988- neighbor.setActive(false);
989- }
990- }
991- }
992-
993- private void switchAI(boolean isOn)
994- {
995- if (!isOn)
996- {
997- for (L2Object o : _visibleObjects.values())
998- {
999- if (o instanceof L2Attackable)
1000- {
1001- L2Attackable mob = (L2Attackable) o;
1002-
1003- // Set target to null and cancel Attack or Cast
1004- mob.setTarget(null);
1005-
1006- // Stop movement
1007- mob.stopMove(null);
1008-
1009- // Stop all active skills effects in progress on the L2Character
1010- mob.stopAllEffects();
1011-
1012- mob.getAggroList().clear();
1013- mob.getAttackByList().clear();
1014- mob.getKnownList().removeAllKnownObjects();
1015-
1016- // stop the ai tasks
1017- if (mob.hasAI())
1018- {
1019- mob.getAI().setIntention(CtrlIntention.IDLE);
1020- mob.getAI().stopAITask();
1021- }
1022- }
1023- else if (o instanceof L2Vehicle)
1024- ((L2Vehicle) o).getKnownList().removeAllKnownObjects();
1025- }
1026- }
1027- else
1028- {
1029- for (L2Object o : _visibleObjects.values())
1030- {
1031- if (o instanceof L2Attackable)
1032- ((L2Attackable) o).getStatus().startHpMpRegeneration();
1033- else if (o instanceof L2Npc)
1034- ((L2Npc) o).startRandomAnimationTimer();
1035- }
1036- }
1037- }
1038-
1039- public boolean isActive()
1040- {
1041- return _active;
1042- }
1043-
1044- /**
1045- * Check if all 9 neighbors (including self) are inactive or active but with no players.
1046- * @return true if the above condition is met.
1047- */
1048- public boolean areNeighborsEmpty()
1049- {
1050- // if this region is occupied, return false.
1051- if (isActive() && !_allPlayable.isEmpty())
1052- return false;
1053-
1054- // if any one of the neighbors is occupied, return false
1055- for (L2WorldRegion neighbor : _surroundingRegions)
1056- {
1057- if (neighbor.isActive() && !neighbor._allPlayable.isEmpty())
1058- return false;
1059- }
1060-
1061- // in all other cases, return true.
1062- return true;
1063- }
1064-
1065- /**
1066- * This function turns this region's AI and geodata on or off
1067- * @param value
1068- */
1069- public void setActive(boolean value)
1070- {
1071- if (_active == value)
1072- return;
1073-
1074- _active = value;
1075-
1076- // turn the AI on or off to match the region's activation.
1077- switchAI(value);
1078- }
1079-
1080- /**
1081- * Immediately sets self as active and starts a timer to set neighbors as active this timer is to avoid turning on neighbors in the case when a person just teleported into a region and then teleported out immediately...there is no reason to activate all the neighbors in that case.
1082- */
1083- private void startActivation()
1084- {
1085- // first set self to active and do self-tasks...
1086- setActive(true);
1087-
1088- // if the timer to deactivate neighbors is running, cancel it.
1089- synchronized (this)
1090- {
1091- if (_neighborsTask != null)
1092- {
1093- _neighborsTask.cancel(true);
1094- _neighborsTask = null;
1095- }
1096-
1097- // then, set a timer to activate the neighbors
1098- _neighborsTask = ThreadPool.schedule(new NeighborsTask(true), 1000 * Config.GRID_NEIGHBOR_TURNON_TIME);
1099- }
1100- }
1101-
1102- /**
1103- * starts a timer to set neighbors (including self) as inactive this timer is to avoid turning off neighbors in the case when a person just moved out of a region that he may very soon return to. There is no reason to turn self & neighbors off in that case.
1104- */
1105- private void startDeactivation()
1106- {
1107- // if the timer to activate neighbors is running, cancel it.
1108- synchronized (this)
1109- {
1110- if (_neighborsTask != null)
1111- {
1112- _neighborsTask.cancel(true);
1113- _neighborsTask = null;
1114- }
1115-
1116- // start a timer to "suggest" a deactivate to self and neighbors.
1117- // suggest means: first check if a neighbor has L2PcInstances in it. If not, deactivate.
1118- _neighborsTask = ThreadPool.schedule(new NeighborsTask(false), 1000 * Config.GRID_NEIGHBOR_TURNOFF_TIME);
1119- }
1120- }
1121-
1122- /**
1123- * Add the L2Object in the L2ObjectHashSet(L2Object) _visibleObjects containing L2Object visible in this L2WorldRegion <BR>
1124- * If L2Object is a L2PcInstance, Add the L2PcInstance in the L2ObjectHashSet(L2PcInstance) _allPlayable containing L2PcInstance of all player in game in this L2WorldRegion <BR>
1125- * Assert : object.getCurrentWorldRegion() == this
1126- * @param object
1127- */
1128- public void addVisibleObject(L2Object object)
1129- {
1130- if (object == null)
1131- return;
1132-
1133- assert object.getRegion() == this;
1134-
1135- _visibleObjects.put(object.getObjectId(), object);
1136-
1137- if (object instanceof L2Playable)
1138- {
1139- _allPlayable.put(object.getObjectId(), (L2Playable) object);
1140-
1141- // if this is the first player to enter the region, activate self & neighbors
1142- if ((_allPlayable.size() == 1) && (!Config.GRIDS_ALWAYS_ON))
1143- startActivation();
1144- }
1145- }
1146-
1147- /**
1148- * Remove the L2Object from the L2ObjectHashSet(L2Object) _visibleObjects in this L2WorldRegion <BR>
1149- * <BR>
1150- * If L2Object is a L2PcInstance, remove it from the L2ObjectHashSet(L2PcInstance) _allPlayable of this L2WorldRegion <BR>
1151- * Assert : object.getCurrentWorldRegion() == this || object.getCurrentWorldRegion() == null
1152- * @param object
1153- */
1154- public void removeVisibleObject(L2Object object)
1155- {
1156- if (object == null)
1157- return;
1158-
1159- assert object.getRegion() == this || object.getRegion() == null;
1160-
1161- _visibleObjects.remove(object.getObjectId());
1162-
1163- if (object instanceof L2Playable)
1164- {
1165- _allPlayable.remove(object.getObjectId());
1166-
1167- if (_allPlayable.isEmpty() && !Config.GRIDS_ALWAYS_ON)
1168- startDeactivation();
1169- }
1170- }
1171-
1172- public void addSurroundingRegion(L2WorldRegion region)
1173- {
1174- _surroundingRegions.add(region);
1175- }
1176-
1177- /**
1178- * @return the FastList _surroundingRegions containing all L2WorldRegion around the current L2WorldRegion
1179- */
1180- public List<L2WorldRegion> getSurroundingRegions()
1181- {
1182- return _surroundingRegions;
1183- }
1184-
1185- public Map<Integer, L2Playable> getVisiblePlayable()
1186- {
1187- return _allPlayable;
1188- }
1189-
1190- public Map<Integer, L2Object> getVisibleObjects()
1191- {
1192- return _visibleObjects;
1193- }
1194-
1195- public String getName()
1196- {
1197- return "(" + _tileX + ", " + _tileY + ")";
1198- }
1199-
1200- /**
1201- * Deleted all spawns in the world.
1202- */
1203- public void deleteVisibleNpcSpawns()
1204- {
1205- for (L2Object obj : _visibleObjects.values())
1206- {
1207- if (obj instanceof L2Npc)
1208- {
1209- ((L2Npc) obj).deleteMe();
1210-
1211- final L2Spawn spawn = ((L2Npc) obj).getSpawn();
1212- if (spawn != null)
1213- {
1214- spawn.setRespawnState(false);
1215- SpawnTable.getInstance().deleteSpawn(spawn, false);
1216- }
1217- }
1218- }
1219- }
1220-}
1221\ No newline at end of file
1222Index: GameServer/java/net/sf/l2j/gameserver/model/L2World.java
1223===================================================================
1224--- GameServer/java/net/sf/l2j/gameserver/model/L2World.java (révision 553)
1225+++ GameServer/java/net/sf/l2j/gameserver/model/L2World.java (nonexistent)
1226@@ -1,387 +0,0 @@
1227-/*
1228- * This program is free software: you can redistribute it and/or modify it under
1229- * the terms of the GNU General Public License as published by the Free Software
1230- * Foundation, either version 3 of the License, or (at your option) any later
1231- * version.
1232- *
1233- * This program is distributed in the hope that it will be useful, but WITHOUT
1234- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1235- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1236- * details.
1237- *
1238- * You should have received a copy of the GNU General Public License along with
1239- * this program. If not, see <http://www.gnu.org/licenses/>.
1240- */
1241-package net.sf.l2j.gameserver.model;
1242-
1243-import java.util.ArrayList;
1244-import java.util.Collection;
1245-import java.util.List;
1246-import java.util.Map;
1247-import java.util.concurrent.ConcurrentHashMap;
1248-import java.util.logging.Logger;
1249-
1250-import net.sf.l2j.gameserver.datatables.CharNameTable;
1251-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1252-import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
1253-
1254-public final class L2World
1255-{
1256- private static Logger _log = Logger.getLogger(L2World.class.getName());
1257-
1258- // Geodata min/max tiles
1259- public static final int TILE_X_MIN = 16;
1260- public static final int TILE_X_MAX = 26;
1261- public static final int TILE_Y_MIN = 10;
1262- public static final int TILE_Y_MAX = 25;
1263-
1264- // Map dimensions
1265- public static final int TILE_SIZE = 32768;
1266- public static final int WORLD_X_MIN = (TILE_X_MIN - 20) * TILE_SIZE;
1267- public static final int WORLD_X_MAX = (TILE_X_MAX - 19) * TILE_SIZE;
1268- public static final int WORLD_Y_MIN = (TILE_Y_MIN - 18) * TILE_SIZE;
1269- public static final int WORLD_Y_MAX = (TILE_Y_MAX - 17) * TILE_SIZE;
1270-
1271- // Regions and offsets
1272- private static final int REGION_SIZE = 4096;
1273- private static final int REGIONS_X = (WORLD_X_MAX - WORLD_X_MIN) / REGION_SIZE;
1274- private static final int REGIONS_Y = (WORLD_Y_MAX - WORLD_Y_MIN) / REGION_SIZE;
1275- private static final int REGION_X_OFFSET = Math.abs(WORLD_X_MIN / REGION_SIZE);
1276- private static final int REGION_Y_OFFSET = Math.abs(WORLD_Y_MIN / REGION_SIZE);
1277-
1278- private final Map<Integer, L2Object> _objects = new ConcurrentHashMap<>();
1279- private final Map<Integer, L2PetInstance> _pets = new ConcurrentHashMap<>();
1280- private final Map<Integer, L2PcInstance> _players = new ConcurrentHashMap<>();
1281-
1282- private final L2WorldRegion[][] _worldRegions = new L2WorldRegion[REGIONS_X + 1][REGIONS_Y + 1];
1283-
1284- protected L2World()
1285- {
1286- for (int i = 0; i <= REGIONS_X; i++)
1287- {
1288- for (int j = 0; j <= REGIONS_Y; j++)
1289- _worldRegions[i][j] = new L2WorldRegion(i, j);
1290- }
1291-
1292- for (int x = 0; x <= REGIONS_X; x++)
1293- {
1294- for (int y = 0; y <= REGIONS_Y; y++)
1295- {
1296- for (int a = -1; a <= 1; a++)
1297- {
1298- for (int b = -1; b <= 1; b++)
1299- {
1300- if (validRegion(x + a, y + b))
1301- _worldRegions[x + a][y + b].addSurroundingRegion(_worldRegions[x][y]);
1302- }
1303- }
1304- }
1305- }
1306- _log.info("L2World: WorldRegion grid (" + REGIONS_X + " by " + REGIONS_Y + ") is now setted up.");
1307- }
1308-
1309- public void addObject(L2Object object)
1310- {
1311- _objects.putIfAbsent(object.getObjectId(), object);
1312- }
1313-
1314- public void removeObject(L2Object object)
1315- {
1316- _objects.remove(object.getObjectId());
1317- }
1318-
1319- public Collection<L2Object> getObjects()
1320- {
1321- return _objects.values();
1322- }
1323-
1324- public L2Object getObject(int objectId)
1325- {
1326- return _objects.get(objectId);
1327- }
1328-
1329- public void addPlayer(L2PcInstance cha)
1330- {
1331- _players.putIfAbsent(cha.getObjectId(), cha);
1332- }
1333-
1334- public void removePlayer(L2PcInstance cha)
1335- {
1336- _players.remove(cha.getObjectId());
1337- }
1338-
1339- public Collection<L2PcInstance> getPlayers()
1340- {
1341- return _players.values();
1342- }
1343-
1344- public L2PcInstance getPlayer(String name)
1345- {
1346- return _players.get(CharNameTable.getInstance().getPlayerObjectId(name));
1347- }
1348-
1349- public L2PcInstance getPlayer(int objectId)
1350- {
1351- return _players.get(objectId);
1352- }
1353-
1354- public L2PetInstance addPet(int ownerId, L2PetInstance pet)
1355- {
1356- return _pets.putIfAbsent(ownerId, pet);
1357- }
1358-
1359- public void removePet(int ownerId)
1360- {
1361- _pets.remove(ownerId);
1362- }
1363-
1364- public L2PetInstance getPet(int ownerId)
1365- {
1366- return _pets.get(ownerId);
1367- }
1368-
1369- /**
1370- * Add a L2Object in the world.<BR>
1371- * <BR>
1372- * <B><U> Concept</U> :</B><BR>
1373- * <BR>
1374- * L2Object (including L2PcInstance) are identified in <B>_visibleObjects</B> of his current L2WorldRegion and in <B>_knownObjects</B> of other surrounding L2Characters <BR>
1375- * L2PcInstance are identified in <B>_allPlayers</B> of L2World, in <B>_allPlayers</B> of his current L2WorldRegion and in <B>_knownPlayer</B> of other surrounding L2Characters <BR>
1376- * <BR>
1377- * <B><U> Actions</U> :</B><BR>
1378- * <BR>
1379- * <li>Add the L2Object object in _allPlayers* of L2World</li> <li>Add the L2Object object in _gmList** of GmListTable</li> <li>Add object in _knownObjects and _knownPlayer* of all surrounding L2WorldRegion L2Characters</li><BR>
1380- * <li>If object is a L2Character, add all surrounding L2Object in its _knownObjects and all surrounding L2PcInstance in its _knownPlayer</li><BR>
1381- * <I>* only if object is a L2PcInstance</I><BR>
1382- * <I>** only if object is a GM L2PcInstance</I><BR>
1383- * <BR>
1384- * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T ADD the object in _visibleObjects and _allPlayers* of L2WorldRegion (need synchronisation)</B></FONT><BR>
1385- * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T ADD the object to _allObjects and _allPlayers* of L2World (need synchronisation)</B></FONT><BR>
1386- * <BR>
1387- * <B><U> Example of use </U> :</B><BR>
1388- * <BR>
1389- * <li>Drop an Item</li> <li>Spawn a L2Character</li> <li>Apply Death Penalty of a L2PcInstance</li><BR>
1390- * <BR>
1391- * @param object L2object to add in the world
1392- * @param newRegion L2WorldRegion in wich the object will be add (not used)
1393- */
1394- public void addVisibleObject(L2Object object, L2WorldRegion newRegion)
1395- {
1396- if (object instanceof L2PcInstance)
1397- {
1398- L2PcInstance player = (L2PcInstance) object;
1399-
1400- if (!player.isTeleporting())
1401- {
1402- L2PcInstance tmp = _players.get(player.getObjectId());
1403- if (tmp != null)
1404- {
1405- _log.warning("Duplicate character!? Closing both characters (" + player.getName() + ")");
1406- player.logout();
1407- tmp.logout();
1408- return;
1409- }
1410- _players.putIfAbsent(player.getObjectId(), player);
1411- }
1412- }
1413-
1414- if (!newRegion.isActive())
1415- return;
1416-
1417- final boolean objectHasKnownlist = (object.getKnownList() != null);
1418-
1419- // tell the player about the surroundings
1420- // Go through the visible objects contained in the circular area
1421- for (L2Object visible : getVisibleObjects(object, 2000))
1422- {
1423- // Add the object in L2ObjectHashSet(L2Object) _knownObjects of the visible L2Character according to conditions :
1424- // - L2Character is visible
1425- // - object is not already known
1426- // - object is in the watch distance
1427- // If L2Object is a L2PcInstance, add L2Object in L2ObjectHashSet(L2PcInstance) _knownPlayer of the visible L2Character
1428- if (visible.getKnownList() != null)
1429- visible.getKnownList().addKnownObject(object);
1430-
1431- // Add the visible L2Object in L2ObjectHashSet(L2Object) _knownObjects of the object according to conditions
1432- // If visible L2Object is a L2PcInstance, add visible L2Object in L2ObjectHashSet(L2PcInstance) _knownPlayer of the object
1433- if (objectHasKnownlist)
1434- object.getKnownList().addKnownObject(visible);
1435- }
1436- }
1437-
1438- /**
1439- * Remove a L2Object from the world.<BR>
1440- * <BR>
1441- * <B><U> Concept</U> :</B><BR>
1442- * <BR>
1443- * L2Object (including L2PcInstance) are identified in <B>_visibleObjects</B> of his current L2WorldRegion and in <B>_knownObjects</B> of other surrounding L2Characters <BR>
1444- * L2PcInstance are identified in <B>_allPlayers</B> of L2World, in <B>_allPlayers</B> of his current L2WorldRegion and in <B>_knownPlayer</B> of other surrounding L2Characters <BR>
1445- * <BR>
1446- * <B><U> Actions</U> :</B><BR>
1447- * <BR>
1448- * <li>Remove the L2Object object from _allPlayers* of L2World</li> <li>Remove the L2Object object from _visibleObjects and _allPlayers* of L2WorldRegion</li> <li>Remove the L2Object object from _gmList** of GmListTable</li> <li>Remove object from _knownObjects and _knownPlayer* of all
1449- * surrounding L2WorldRegion L2Characters</li><BR>
1450- * <li>If object is a L2Character, remove all L2Object from its _knownObjects and all L2PcInstance from its _knownPlayer</li><BR>
1451- * <BR>
1452- * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T REMOVE the object from _allObjects of L2World</B></FONT><BR>
1453- * <BR>
1454- * <I>* only if object is a L2PcInstance</I><BR>
1455- * <I>** only if object is a GM L2PcInstance</I><BR>
1456- * <BR>
1457- * <B><U> Example of use </U> :</B><BR>
1458- * <BR>
1459- * <li>Pickup an Item</li> <li>Decay a L2Character</li><BR>
1460- * <BR>
1461- * @param object L2object to remove from the world
1462- * @param oldRegion L2WorldRegion in wich the object was before removing
1463- */
1464- public void removeVisibleObject(L2Object object, L2WorldRegion oldRegion)
1465- {
1466- if (object == null || oldRegion == null)
1467- return;
1468-
1469- // Remove the object from the L2ObjectHashSet(L2Object) _visibleObjects of L2WorldRegion
1470- // If object is a L2PcInstance, remove it from the L2ObjectHashSet(L2PcInstance) _allPlayers of this L2WorldRegion
1471- oldRegion.removeVisibleObject(object);
1472-
1473- final boolean objectHasKnownlist = (object.getKnownList() != null);
1474-
1475- // Go through all surrounding L2WorldRegion L2Characters
1476- for (L2WorldRegion reg : oldRegion.getSurroundingRegions())
1477- {
1478- for (L2Object obj : reg.getVisibleObjects().values())
1479- {
1480- if (obj.getKnownList() != null)
1481- obj.getKnownList().removeKnownObject(object);
1482-
1483- if (objectHasKnownlist)
1484- object.getKnownList().removeKnownObject(obj);
1485- }
1486- }
1487-
1488- // If object is a L2Character :
1489- // Remove all L2Object from L2ObjectHashSet(L2Object) containing all L2Object detected by the L2Character
1490- // Remove all L2PcInstance from L2ObjectHashSet(L2PcInstance) containing all player ingame detected by the L2Character
1491- if (objectHasKnownlist)
1492- object.getKnownList().removeAllKnownObjects();
1493-
1494- // If selected L2Object is a L2PcIntance, remove it from L2ObjectHashSet(L2PcInstance) _allPlayers of L2World
1495- if (object instanceof L2PcInstance)
1496- {
1497- if (!((L2PcInstance) object).isTeleporting())
1498- removePlayer((L2PcInstance) object);
1499- }
1500- }
1501-
1502- /**
1503- * <B><U> Concept</U> :</B><BR>
1504- * <BR>
1505- * All visible object are identified in <B>_visibleObjects</B> of their current L2WorldRegion <BR>
1506- * All surrounding L2WorldRegion are identified in <B>_surroundingRegions</B> of the selected L2WorldRegion in order to scan a large area around a L2Object
1507- * @param object L2object that determine the center of the circular area
1508- * @param radius Radius of the circular area
1509- * @return all visible objects of the L2WorldRegions in the circular area (radius) centered on the object.
1510- */
1511- public static List<L2Object> getVisibleObjects(L2Object object, int radius)
1512- {
1513- if (object == null || !object.isVisible())
1514- return new ArrayList<>();
1515-
1516- int x = object.getX();
1517- int y = object.getY();
1518- int sqRadius = radius * radius;
1519-
1520- // Create an FastList in order to contain all visible L2Object
1521- List<L2Object> result = new ArrayList<>();
1522-
1523- // Go through the FastList of region
1524- for (L2WorldRegion regi : object.getRegion().getSurroundingRegions())
1525- {
1526- // Go through visible objects of the selected region
1527- for (L2Object _object : regi.getVisibleObjects().values())
1528- {
1529- if (_object == null || _object.equals(object))
1530- continue; // skip our own character
1531-
1532- int x1 = _object.getX();
1533- int y1 = _object.getY();
1534-
1535- double dx = x1 - x;
1536- double dy = y1 - y;
1537-
1538- // If the visible object is inside the circular area add the object to the FastList result
1539- if (dx * dx + dy * dy < sqRadius)
1540- result.add(_object);
1541- }
1542- }
1543-
1544- return result;
1545- }
1546-
1547- public static int getRegionX(int regionX)
1548- {
1549- return (regionX - REGION_X_OFFSET) * REGION_SIZE;
1550- }
1551-
1552- public static int getRegionY(int regionY)
1553- {
1554- return (regionY - REGION_Y_OFFSET) * REGION_SIZE;
1555- }
1556-
1557- /**
1558- * @param point position of the object.
1559- * @return the current L2WorldRegion of the object according to its position (x,y).
1560- */
1561- public L2WorldRegion getRegion(Location point)
1562- {
1563- return getRegion(point.getX(), point.getY());
1564- }
1565-
1566- public L2WorldRegion getRegion(int x, int y)
1567- {
1568- return _worldRegions[(x - WORLD_X_MIN) / REGION_SIZE][(y - WORLD_Y_MIN) / REGION_SIZE];
1569- }
1570-
1571- /**
1572- * @return the whole 2d array containing the world regions used by ZoneData.java to setup zones inside the world regions
1573- */
1574- public L2WorldRegion[][] getWorldRegions()
1575- {
1576- return _worldRegions;
1577- }
1578-
1579- /**
1580- * Check if the current L2WorldRegions of the object is valid according to its position (x,y).
1581- * @param x X position of the object
1582- * @param y Y position of the object
1583- * @return True if the L2WorldRegion is valid
1584- */
1585- private static boolean validRegion(int x, int y)
1586- {
1587- return (x >= 0 && x <= REGIONS_X && y >= 0 && y <= REGIONS_Y);
1588- }
1589-
1590- /**
1591- * Deleted all spawns in the world.
1592- */
1593- public void deleteVisibleNpcSpawns()
1594- {
1595- _log.info("Deleting all visible NPCs.");
1596- for (int i = 0; i <= REGIONS_X; i++)
1597- {
1598- for (int j = 0; j <= REGIONS_Y; j++)
1599- _worldRegions[i][j].deleteVisibleNpcSpawns();
1600- }
1601- _log.info("All visibles NPCs are now deleted.");
1602- }
1603-
1604- public static L2World getInstance()
1605- {
1606- return SingletonHolder._instance;
1607- }
1608-
1609- private static class SingletonHolder
1610- {
1611- protected static final L2World _instance = new L2World();
1612- }
1613-}
1614\ No newline at end of file
1615Index: GameServer/java/net/sf/l2j/gameserver/model/entity/Couple.java
1616===================================================================
1617--- GameServer/java/net/sf/l2j/gameserver/model/entity/Couple.java (révision 553)
1618+++ GameServer/java/net/sf/l2j/gameserver/model/entity/Couple.java (nonexistent)
1619@@ -1,158 +0,0 @@
1620-/*
1621- * This program is free software: you can redistribute it and/or modify it under
1622- * the terms of the GNU General Public License as published by the Free Software
1623- * Foundation, either version 3 of the License, or (at your option) any later
1624- * version.
1625- *
1626- * This program is distributed in the hope that it will be useful, but WITHOUT
1627- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
1628- * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
1629- * details.
1630- *
1631- * You should have received a copy of the GNU General Public License along with
1632- * this program. If not, see <http://www.gnu.org/licenses/>.
1633- */
1634-package net.sf.l2j.gameserver.model.entity;
1635-
1636-import java.sql.Connection;
1637-import java.sql.PreparedStatement;
1638-import java.sql.ResultSet;
1639-import java.util.logging.Level;
1640-import java.util.logging.Logger;
1641-
1642-import net.sf.l2j.L2DatabaseFactory;
1643-import net.sf.l2j.gameserver.idfactory.IdFactory;
1644-import net.sf.l2j.gameserver.instancemanager.CoupleManager;
1645-import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1646-
1647-/**
1648- * @author evill33t
1649- */
1650-public class Couple
1651-{
1652- private static final Logger _log = Logger.getLogger(Couple.class.getName());
1653-
1654- private int _Id = 0;
1655- private int _player1Id = 0;
1656- private int _player2Id = 0;
1657- private static int _partnerId = 0;
1658- private boolean _maried = false;
1659-
1660- public Couple(int coupleId)
1661- {
1662- _Id = coupleId;
1663-
1664- try (Connection con = L2DatabaseFactory.getInstance().getConnection())
1665- {
1666- PreparedStatement statement = con.prepareStatement("SELECT * FROM mods_wedding WHERE id = ?");
1667- statement.setInt(1, _Id);
1668- ResultSet rs = statement.executeQuery();
1669-
1670- while (rs.next())
1671- {
1672- _player1Id = rs.getInt("player1Id");
1673- _player2Id = rs.getInt("player2Id");
1674- _maried = rs.getBoolean("married");
1675- }
1676- rs.close();
1677- statement.close();
1678- }
1679- catch (Exception e)
1680- {
1681- _log.log(Level.WARNING, "Exception: Couple.load(): " + e.getMessage(), e);
1682- }
1683- }
1684-
1685- public Couple(L2PcInstance player1, L2PcInstance player2)
1686- {
1687- int _tempPlayer1Id = player1.getObjectId();
1688- int _tempPlayer2Id = player2.getObjectId();
1689-
1690- _player1Id = _tempPlayer1Id;
1691- _player2Id = _tempPlayer2Id;
1692-
1693- try (Connection con = L2DatabaseFactory.getInstance().getConnection())
1694- {
1695- _Id = IdFactory.getInstance().getNextId();
1696- PreparedStatement statement = con.prepareStatement("INSERT INTO mods_wedding (id, player1Id, player2Id, married) VALUES (?,?,?,?)");
1697- statement.setInt(1, _Id);
1698- statement.setInt(2, _player1Id);
1699- statement.setInt(3, _player2Id);
1700- statement.setBoolean(4, false);
1701- statement.execute();
1702- statement.close();
1703- }
1704- catch (Exception e)
1705- {
1706- _log.log(Level.WARNING, "Exception: Couple creation: " + e.getMessage(), e);
1707- }
1708- }
1709-
1710- public void marry()
1711- {
1712- try (Connection con = L2DatabaseFactory.getInstance().getConnection())
1713- {
1714- PreparedStatement statement = con.prepareStatement("UPDATE mods_wedding SET married = ? WHERE id = ?");
1715- statement.setBoolean(1, true);
1716- statement.setInt(2, _Id);
1717- statement.execute();
1718- statement.close();
1719- _maried = true;
1720- }
1721- catch (Exception e)
1722- {
1723- _log.log(Level.WARNING, "Exception: Couple.marry(): " + e.getMessage(), e);
1724- }
1725- }
1726-
1727- public void divorce()
1728- {
1729- try (Connection con = L2DatabaseFactory.getInstance().getConnection())
1730- {
1731- PreparedStatement statement = con.prepareStatement("DELETE FROM mods_wedding WHERE id = ?");
1732- statement.setInt(1, _Id);
1733- statement.execute();
1734- statement.close();
1735- }
1736- catch (Exception e)
1737- {
1738- _log.log(Level.WARNING, "Exception: Couple.divorce(): " + e.getMessage(), e);
1739- }
1740- }
1741-
1742- public final int getId()
1743- {
1744- return _Id;
1745- }
1746-
1747- public final int getPlayer1Id()
1748- {
1749- return _player1Id;
1750- }
1751-
1752- public final int getPlayer2Id()
1753- {
1754- return _player2Id;
1755- }
1756-
1757- public static final int getPartnerId(int playerId)
1758- {
1759- for (Couple cl : CoupleManager.getInstance().getCouples())
1760- {
1761- if (cl.getPlayer1Id() == playerId || cl.getPlayer2Id() == playerId)
1762- {
1763- if (cl.getPlayer1Id() == playerId)
1764- _partnerId = cl.getPlayer2Id();
1765- else
1766- _partnerId = cl.getPlayer1Id();
1767- }
1768- }
1769-
1770- return _partnerId;
1771- }
1772-
1773- public final boolean getMaried()
1774- {
1775- return _maried;
1776- }
1777-}
1778\ No newline at end of file
1779Index: GameServer/java/net/sf/l2j/gameserver/Shutdown.java
1780===================================================================
1781--- GameServer/java/net/sf/l2j/gameserver/Shutdown.java (révision 553)
1782+++ GameServer/java/net/sf/l2j/gameserver/Shutdown.java (révision 568)
1783@@ -25,6 +25,7 @@
1784 import net.sf.l2j.gameserver.datatables.BufferTable;
1785 import net.sf.l2j.gameserver.datatables.ServerMemo;
1786 import net.sf.l2j.gameserver.instancemanager.CastleManorManager;
1787+import net.sf.l2j.gameserver.instancemanager.CoupleManager;
1788 import net.sf.l2j.gameserver.instancemanager.FishingChampionshipManager;
1789 import net.sf.l2j.gameserver.instancemanager.FourSepulchersManager;
1790 import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
1791@@ -32,7 +33,7 @@
1792 import net.sf.l2j.gameserver.instancemanager.SevenSigns;
1793 import net.sf.l2j.gameserver.instancemanager.SevenSignsFestival;
1794 import net.sf.l2j.gameserver.instancemanager.ZoneManager;
1795-import net.sf.l2j.gameserver.model.L2World;
1796+import net.sf.l2j.gameserver.model.World;
1797 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1798 import net.sf.l2j.gameserver.model.entity.Hero;
1799 import net.sf.l2j.gameserver.model.olympiad.Olympiad;
1800@@ -186,6 +187,13 @@
1801 BufferTable.getInstance().saveSchemes();
1802 _log.info("BufferTable data has been saved.");
1803
1804+ // Couples save.
1805+ if (Config.ALLOW_WEDDING)
1806+ {
1807+ CoupleManager.getInstance().save();
1808+ _log.info("CoupleManager data has been saved.");
1809+ }
1810+
1811 // Save server memos.
1812 ServerMemo.getInstance().storeMe();
1813 _log.info("ServerMemo data has been saved.");
1814@@ -417,7 +425,7 @@
1815 */
1816 private static void disconnectAllCharacters()
1817 {
1818- for (L2PcInstance player : L2World.getInstance().getPlayers())
1819+ for (L2PcInstance player : World.getInstance().getPlayers())
1820 {
1821 try
1822 {
1823Index: GameServer/java/net/sf/l2j/gameserver/taskmanager/ItemsOnGroundTaskManager.java
1824===================================================================
1825--- GameServer/java/net/sf/l2j/gameserver/taskmanager/ItemsOnGroundTaskManager.java (révision 553)
1826+++ GameServer/java/net/sf/l2j/gameserver/taskmanager/ItemsOnGroundTaskManager.java (révision 568)
1827@@ -28,7 +28,7 @@
1828 import net.sf.l2j.Config;
1829 import net.sf.l2j.L2DatabaseFactory;
1830 import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
1831-import net.sf.l2j.gameserver.model.L2World;
1832+import net.sf.l2j.gameserver.model.World;
1833 import net.sf.l2j.gameserver.model.actor.L2Character;
1834 import net.sf.l2j.gameserver.model.actor.L2Playable;
1835 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
1836@@ -74,7 +74,7 @@
1837
1838 // Create new item.
1839 final ItemInstance item = new ItemInstance(result.getInt(1), result.getInt(2));
1840- L2World.getInstance().addObject(item);
1841+ World.getInstance().addObject(item);
1842
1843 // Check and set count.
1844 final int count = result.getInt(3);
1845@@ -88,10 +88,10 @@
1846
1847 // Spawn item in the world.
1848 item.getPosition().set(result.getInt(5), result.getInt(6), result.getInt(7));
1849- item.setRegion(L2World.getInstance().getRegion(item.getPosition()));
1850+ item.setRegion(World.getInstance().getRegion(item.getPosition()));
1851 item.getRegion().addVisibleObject(item);
1852 item.setIsVisible(true);
1853- L2World.getInstance().addVisibleObject(item, item.getRegion());
1854+ World.getInstance().addVisibleObject(item, item.getRegion());
1855
1856 // Get interval, add item to the list.
1857 long interval = result.getLong(8);
1858@@ -194,8 +194,8 @@
1859
1860 // Destroy item and remove from task.
1861 final ItemInstance item = entry.getKey();
1862- L2World.getInstance().removeVisibleObject(item, item.getRegion());
1863- L2World.getInstance().removeObject(item);
1864+ World.getInstance().removeVisibleObject(item, item.getRegion());
1865+ World.getInstance().removeObject(item);
1866 _items.remove(item);
1867 }
1868 }
1869Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java
1870===================================================================
1871--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java (révision 553)
1872+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestEnchantItem.java (révision 568)
1873@@ -20,7 +20,7 @@
1874 import net.sf.l2j.gameserver.datatables.ArmorSetsTable;
1875 import net.sf.l2j.gameserver.datatables.SkillTable;
1876 import net.sf.l2j.gameserver.model.L2Skill;
1877-import net.sf.l2j.gameserver.model.L2World;
1878+import net.sf.l2j.gameserver.model.World;
1879 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1880 import net.sf.l2j.gameserver.model.item.ArmorSet;
1881 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
1882@@ -276,7 +276,7 @@
1883 else
1884 activeChar.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.ENCHANTMENT_FAILED_S1_EVAPORATED).addItemName(item.getItemId()));
1885
1886- L2World.getInstance().removeObject(destroyItem);
1887+ World.getInstance().removeObject(destroyItem);
1888 if (crystalId == 0)
1889 activeChar.sendPacket(EnchantResult.UNK_RESULT_4);
1890 else
1891Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/TradeRequest.java
1892===================================================================
1893--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/TradeRequest.java (révision 553)
1894+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/TradeRequest.java (révision 568)
1895@@ -16,7 +16,7 @@
1896
1897 import net.sf.l2j.Config;
1898 import net.sf.l2j.gameserver.model.BlockList;
1899-import net.sf.l2j.gameserver.model.L2World;
1900+import net.sf.l2j.gameserver.model.World;
1901 import net.sf.l2j.gameserver.model.actor.L2Npc;
1902 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1903 import net.sf.l2j.gameserver.network.SystemMessageId;
1904@@ -47,7 +47,7 @@
1905 return;
1906 }
1907
1908- final L2PcInstance target = L2World.getInstance().getPlayer(_objectId);
1909+ final L2PcInstance target = World.getInstance().getPlayer(_objectId);
1910 if (target == null || !player.getKnownList().knowsObject(target) || target.equals(player))
1911 {
1912 player.sendPacket(SystemMessageId.TARGET_IS_INCORRECT);
1913Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/Action.java
1914===================================================================
1915--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/Action.java (révision 553)
1916+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/Action.java (révision 568)
1917@@ -15,7 +15,7 @@
1918 package net.sf.l2j.gameserver.network.clientpackets;
1919
1920 import net.sf.l2j.gameserver.model.L2Object;
1921-import net.sf.l2j.gameserver.model.L2World;
1922+import net.sf.l2j.gameserver.model.World;
1923 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1924 import net.sf.l2j.gameserver.network.SystemMessageId;
1925 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
1926@@ -57,7 +57,7 @@
1927 return;
1928 }
1929
1930- final L2Object obj = (activeChar.getTargetId() == _objectId) ? activeChar.getTarget() : L2World.getInstance().getObject(_objectId);
1931+ final L2Object obj = (activeChar.getTargetId() == _objectId) ? activeChar.getTarget() : World.getInstance().getObject(_objectId);
1932 if (obj == null)
1933 {
1934 activeChar.sendPacket(ActionFailed.STATIC_PACKET);
1935Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java
1936===================================================================
1937--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java (révision 553)
1938+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AttackRequest.java (révision 568)
1939@@ -15,7 +15,7 @@
1940 package net.sf.l2j.gameserver.network.clientpackets;
1941
1942 import net.sf.l2j.gameserver.model.L2Object;
1943-import net.sf.l2j.gameserver.model.L2World;
1944+import net.sf.l2j.gameserver.model.World;
1945 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1946 import net.sf.l2j.gameserver.network.SystemMessageId;
1947 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
1948@@ -58,7 +58,7 @@
1949 if (activeChar.getTargetId() == _objectId)
1950 target = activeChar.getTarget();
1951 else
1952- target = L2World.getInstance().getObject(_objectId);
1953+ target = World.getInstance().getObject(_objectId);
1954
1955 if (target == null)
1956 return;
1957Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/DlgAnswer.java
1958===================================================================
1959--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/DlgAnswer.java (révision 553)
1960+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/DlgAnswer.java (révision 568)
1961@@ -47,7 +47,7 @@
1962 else if (_messageId == SystemMessageId.S1_WISHES_TO_SUMMON_YOU_FROM_S2_DO_YOU_ACCEPT.getId())
1963 activeChar.teleportAnswer(_answer, _requesterId);
1964 else if (_messageId == 1983 && Config.ALLOW_WEDDING)
1965- activeChar.EngageAnswer(_answer);
1966+ activeChar.engageAnswer(_answer);
1967 else if (_messageId == SystemMessageId.WOULD_YOU_LIKE_TO_OPEN_THE_GATE.getId())
1968 activeChar.activateGate(_answer, 1);
1969 else if (_messageId == SystemMessageId.WOULD_YOU_LIKE_TO_CLOSE_THE_GATE.getId())
1970Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExAskJoinMPCC.java
1971===================================================================
1972--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExAskJoinMPCC.java (révision 553)
1973+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestExAskJoinMPCC.java (révision 568)
1974@@ -15,7 +15,7 @@
1975 package net.sf.l2j.gameserver.network.clientpackets;
1976
1977 import net.sf.l2j.gameserver.model.L2Party;
1978-import net.sf.l2j.gameserver.model.L2World;
1979+import net.sf.l2j.gameserver.model.World;
1980 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
1981 import net.sf.l2j.gameserver.network.SystemMessageId;
1982 import net.sf.l2j.gameserver.network.serverpackets.ExAskJoinMPCC;
1983@@ -42,7 +42,7 @@
1984 if (activeChar == null)
1985 return;
1986
1987- L2PcInstance player = L2World.getInstance().getPlayer(_name);
1988+ L2PcInstance player = World.getInstance().getPlayer(_name);
1989 if (player == null)
1990 return;
1991
1992Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AddTradeItem.java
1993===================================================================
1994--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AddTradeItem.java (révision 553)
1995+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/AddTradeItem.java (révision 568)
1996@@ -14,7 +14,7 @@
1997 */
1998 package net.sf.l2j.gameserver.network.clientpackets;
1999
2000-import net.sf.l2j.gameserver.model.L2World;
2001+import net.sf.l2j.gameserver.model.World;
2002 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
2003 import net.sf.l2j.gameserver.model.tradelist.TradeItem;
2004 import net.sf.l2j.gameserver.model.tradelist.TradeList;
2005@@ -56,7 +56,7 @@
2006 }
2007
2008 final L2PcInstance partner = trade.getPartner();
2009- if (partner == null || L2World.getInstance().getPlayer(partner.getObjectId()) == null || partner.getActiveTradeList() == null)
2010+ if (partner == null || World.getInstance().getPlayer(partner.getObjectId()) == null || partner.getActiveTradeList() == null)
2011 {
2012 // Trade partner not found, cancel trade
2013 if (partner != null)
2014Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendList.java
2015===================================================================
2016--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendList.java (révision 553)
2017+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestFriendList.java (révision 568)
2018@@ -15,7 +15,7 @@
2019 package net.sf.l2j.gameserver.network.clientpackets;
2020
2021 import net.sf.l2j.gameserver.datatables.CharNameTable;
2022-import net.sf.l2j.gameserver.model.L2World;
2023+import net.sf.l2j.gameserver.model.World;
2024 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
2025 import net.sf.l2j.gameserver.network.SystemMessageId;
2026 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
2027@@ -43,7 +43,7 @@
2028 if (friendName == null)
2029 continue;
2030
2031- final L2PcInstance friend = L2World.getInstance().getPlayer(id);
2032+ final L2PcInstance friend = World.getInstance().getPlayer(id);
2033
2034 activeChar.sendPacket(SystemMessage.getSystemMessage((friend == null || !friend.isOnline()) ? SystemMessageId.S1_OFFLINE : SystemMessageId.S1_ONLINE).addString(friendName));
2035 }
2036Index: GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeInfo.java
2037===================================================================
2038--- GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeInfo.java (révision 553)
2039+++ GameServer/java/net/sf/l2j/gameserver/network/clientpackets/RequestRecipeShopMakeInfo.java (révision 568)
2040@@ -14,7 +14,7 @@
2041 */
2042 package net.sf.l2j.gameserver.network.clientpackets;
2043
2044-import net.sf.l2j.gameserver.model.L2World;
2045+import net.sf.l2j.gameserver.model.World;
2046 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
2047 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance.StoreType;
2048 import net.sf.l2j.gameserver.network.serverpackets.RecipeShopItemInfo;
2049@@ -37,7 +37,7 @@
2050 if (player == null)
2051 return;
2052
2053- final L2PcInstance shop = L2World.getInstance().getPlayer(_playerObjectId);
2054+ final L2PcInstance shop = World.getInstance().getPlayer(_playerObjectId);
2055 if (shop == null || shop.getStoreType() != StoreType.MANUFACTURE)
2056 return;
2057
2058Index: GameServer/java/net/sf/l2j/gameserver/network/serverpackets/SetupGauge.java
2059===================================================================
2060--- GameServer/java/net/sf/l2j/gameserver/network/serverpackets/SetupGauge.java (révision 553)
2061+++ GameServer/java/net/sf/l2j/gameserver/network/serverpackets/SetupGauge.java (révision 568)
2062@@ -16,26 +16,30 @@
2063
2064 public class SetupGauge extends L2GameServerPacket
2065 {
2066- public static final int BLUE = 0;
2067- public static final int RED = 1;
2068- public static final int CYAN = 2;
2069+ public enum GaugeColor
2070+ {
2071+ BLUE,
2072+ RED,
2073+ CYAN,
2074+ GREEN
2075+ }
2076
2077- private final int _dat1;
2078+ private final GaugeColor _color;
2079 private final int _time;
2080- private final int _time2;
2081+ private final int _maxTime;
2082
2083- public SetupGauge(int dat1, int time)
2084+ public SetupGauge(GaugeColor color, int time)
2085 {
2086- _dat1 = dat1;
2087+ _color = color;
2088 _time = time;
2089- _time2 = time;
2090+ _maxTime = time;
2091 }
2092
2093- public SetupGauge(int color, int currentTime, int maxTime)
2094+ public SetupGauge(GaugeColor color, int currentTime, int maxTime)
2095 {
2096- _dat1 = color;
2097+ _color = color;
2098 _time = currentTime;
2099- _time2 = maxTime;
2100+ _maxTime = maxTime;
2101 }
2102
2103 @Override
2104@@ -42,8 +46,8 @@
2105 protected final void writeImpl()
2106 {
2107 writeC(0x6d);
2108- writeD(_dat1);
2109+ writeD(_color.ordinal());
2110 writeD(_time);
2111- writeD(_time2);
2112+ writeD(_maxTime);
2113 }
2114 }
2115\ No newline at end of file
2116Index: GameServer/java/net/sf/l2j/gameserver/network/serverpackets/RecipeBookItemList.java
2117===================================================================
2118--- GameServer/java/net/sf/l2j/gameserver/network/serverpackets/RecipeBookItemList.java (révision 553)
2119+++ GameServer/java/net/sf/l2j/gameserver/network/serverpackets/RecipeBookItemList.java (révision 568)
2120@@ -56,7 +56,7 @@
2121 for (RecipeList recipe : _recipes)
2122 {
2123 writeD(recipe.getId());
2124- writeD(i + 1);
2125+ writeD(++i);
2126 }
2127 }
2128 }
2129Index: GameServer/java/net/sf/l2j/gameserver/ai/model/L2PlayerAI.java
2130===================================================================
2131--- GameServer/java/net/sf/l2j/gameserver/ai/model/L2PlayerAI.java (révision 553)
2132+++ GameServer/java/net/sf/l2j/gameserver/ai/model/L2PlayerAI.java (révision 568)
2133@@ -23,7 +23,9 @@
2134 import net.sf.l2j.gameserver.model.actor.L2Character;
2135 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
2136 import net.sf.l2j.gameserver.model.actor.instance.L2StaticObjectInstance;
2137+import net.sf.l2j.gameserver.network.SystemMessageId;
2138 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
2139+import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
2140
2141 public class L2PlayerAI extends L2PlayableAI
2142 {
2143@@ -247,6 +249,9 @@
2144 _actor.setIsCastingNow(false);
2145 return;
2146 }
2147+
2148+ if (_actor.isSkillDisabled(_skill))
2149+ _actor.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE).addSkillName(_skill));
2150 }
2151
2152 if (_skill.getHitTime() > 50 && !_skill.isSimultaneousCast())
2153Index: GameServer/java/net/sf/l2j/gameserver/taskmanager/KnownListUpdateTaskManager.java
2154===================================================================
2155--- GameServer/java/net/sf/l2j/gameserver/taskmanager/KnownListUpdateTaskManager.java (révision 553)
2156+++ GameServer/java/net/sf/l2j/gameserver/taskmanager/KnownListUpdateTaskManager.java (révision 568)
2157@@ -18,8 +18,8 @@
2158
2159 import net.sf.l2j.Config;
2160 import net.sf.l2j.gameserver.model.L2Object;
2161-import net.sf.l2j.gameserver.model.L2World;
2162-import net.sf.l2j.gameserver.model.L2WorldRegion;
2163+import net.sf.l2j.gameserver.model.World;
2164+import net.sf.l2j.gameserver.model.WorldRegion;
2165 import net.sf.l2j.gameserver.model.actor.L2Attackable;
2166 import net.sf.l2j.gameserver.model.actor.L2Character;
2167 import net.sf.l2j.gameserver.model.actor.L2Playable;
2168@@ -27,7 +27,7 @@
2169
2170 /**
2171 * Periodically updates known list of all existing {@link L2Character}.<br>
2172- * Special scope is used for {@link L2WorldRegion} without {@link L2PcInstance} inside.
2173+ * Special scope is used for {@link WorldRegion} without {@link L2PcInstance} inside.
2174 * @author Hasha
2175 */
2176 public final class KnownListUpdateTaskManager implements Runnable
2177@@ -62,9 +62,9 @@
2178 _flagForgetAdd = !_flagForgetAdd;
2179
2180 // Go through all world regions.
2181- for (L2WorldRegion regions[] : L2World.getInstance().getWorldRegions())
2182+ for (WorldRegion regions[] : World.getInstance().getWorldRegions())
2183 {
2184- for (L2WorldRegion region : regions)
2185+ for (WorldRegion region : regions)
2186 {
2187 // Skip inactive regions unless full update (knownlist can be still updated regardless AI active or detached).
2188 if (!region.isActive() && !fullUpdate)
2189@@ -71,7 +71,7 @@
2190 continue;
2191
2192 // Go through all visible objects.
2193- for (L2Object object : region.getVisibleObjects().values())
2194+ for (L2Object object : region.getObjects())
2195 {
2196 // don't busy about objects lower than L2Character.
2197 if (!(object instanceof L2Character) || !object.isVisible())
2198@@ -92,13 +92,13 @@
2199 // The other iteration performs object add.
2200 else
2201 {
2202- for (L2WorldRegion surroundingRegion : region.getSurroundingRegions())
2203+ for (WorldRegion surroundingRegion : region.getSurroundingRegions())
2204 {
2205 // Object is a monster and surrounding region does not contain playable, skip.
2206 if (isAttackable && !surroundingRegion.isActive())
2207 continue;
2208
2209- for (L2Object o : surroundingRegion.getVisibleObjects().values())
2210+ for (L2Object o : surroundingRegion.getObjects())
2211 {
2212 if (o != object)
2213 object.getKnownList().addKnownObject(o);
2214Index: GameServer/java/net/sf/l2j/gameserver/taskmanager/WaterTaskManager.java
2215===================================================================
2216--- GameServer/java/net/sf/l2j/gameserver/taskmanager/WaterTaskManager.java (révision 553)
2217+++ GameServer/java/net/sf/l2j/gameserver/taskmanager/WaterTaskManager.java (révision 568)
2218@@ -21,11 +21,13 @@
2219
2220 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
2221 import net.sf.l2j.gameserver.network.SystemMessageId;
2222+import net.sf.l2j.gameserver.network.serverpackets.SetupGauge;
2223 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
2224+import net.sf.l2j.gameserver.network.serverpackets.SetupGauge.GaugeColor;
2225+import net.sf.l2j.gameserver.skills.Stats;
2226
2227 /**
2228 * Updates {@link L2PcInstance} drown timer and reduces {@link L2PcInstance} HP, when drowning.
2229- * @author Tryskell, Hasha
2230 */
2231 public final class WaterTaskManager implements Runnable
2232 {
2233@@ -45,11 +47,17 @@
2234 /**
2235 * Adds {@link L2PcInstance} to the WaterTask.
2236 * @param player : {@link L2PcInstance} to be added and checked.
2237- * @param time : Time in ms, after which the drowning effect is applied.
2238 */
2239- public final void add(L2PcInstance player, long time)
2240+ public final void add(L2PcInstance player)
2241 {
2242- _players.put(player, System.currentTimeMillis() + time);
2243+ if (!player.isDead() && !_players.containsKey(player))
2244+ {
2245+ final int time = (int) player.calcStat(Stats.BREATH, 60000 * player.getRace().getBreathMultiplier(), player, null);
2246+
2247+ _players.put(player, System.currentTimeMillis() + time);
2248+
2249+ player.sendPacket(new SetupGauge(GaugeColor.CYAN, time));
2250+ }
2251 }
2252
2253 /**
2254@@ -58,7 +66,8 @@
2255 */
2256 public final void remove(L2PcInstance player)
2257 {
2258- _players.remove(player);
2259+ if (_players.remove(player) != null)
2260+ player.sendPacket(new SetupGauge(GaugeColor.CYAN, 0));
2261 }
2262
2263 @Override
2264Index: GameServer/java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java
2265===================================================================
2266--- GameServer/java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java (révision 553)
2267+++ GameServer/java/net/sf/l2j/gameserver/templates/skills/L2SkillType.java (révision 568)
2268@@ -75,7 +75,6 @@
2269 HEAL_STATIC,
2270 MANARECHARGE,
2271 HEAL_PERCENT,
2272- CPHEAL_PERCENT,
2273 MANAHEAL_PERCENT,
2274
2275 GIVE_SP,
2276Index: GameServer/java/net/sf/l2j/gameserver/instancemanager/SevenSigns.java
2277===================================================================
2278--- GameServer/java/net/sf/l2j/gameserver/instancemanager/SevenSigns.java (révision 553)
2279+++ GameServer/java/net/sf/l2j/gameserver/instancemanager/SevenSigns.java (révision 568)
2280@@ -31,7 +31,7 @@
2281 import net.sf.l2j.gameserver.datatables.MapRegionTable.TeleportWhereType;
2282 import net.sf.l2j.gameserver.datatables.SkillTable;
2283 import net.sf.l2j.gameserver.instancemanager.AutoSpawnManager.AutoSpawnInstance;
2284-import net.sf.l2j.gameserver.model.L2World;
2285+import net.sf.l2j.gameserver.model.World;
2286 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
2287 import net.sf.l2j.gameserver.network.SystemMessageId;
2288 import net.sf.l2j.gameserver.network.serverpackets.SSQInfo;
2289@@ -1222,7 +1222,7 @@
2290 */
2291 protected void teleLosingCabalFromDungeons(String compWinner)
2292 {
2293- for (L2PcInstance player : L2World.getInstance().getPlayers())
2294+ for (L2PcInstance player : World.getInstance().getPlayers())
2295 {
2296 StatsSet currPlayer = _signsPlayerData.get(player.getObjectId());
2297
2298@@ -1362,7 +1362,7 @@
2299 */
2300 public void giveSosEffect(int strifeOwner)
2301 {
2302- for (L2PcInstance player : L2World.getInstance().getPlayers())
2303+ for (L2PcInstance player : World.getInstance().getPlayers())
2304 {
2305 int cabal = getPlayerCabal(player.getObjectId());
2306 if (cabal != SevenSigns.CABAL_NULL)
2307@@ -1382,7 +1382,7 @@
2308 */
2309 public void removeSosEffect()
2310 {
2311- for (L2PcInstance player : L2World.getInstance().getPlayers())
2312+ for (L2PcInstance player : World.getInstance().getPlayers())
2313 {
2314 // Remove Seal of Strife buffs/debuffs.
2315 player.removeSkill(SkillTable.FrequentSkill.THE_VICTOR_OF_WAR.getSkill());
2316Index: GameServer/java/net/sf/l2j/gameserver/geoengine/GeoEngine.java
2317===================================================================
2318--- GameServer/java/net/sf/l2j/gameserver/geoengine/GeoEngine.java (révision 553)
2319+++ GameServer/java/net/sf/l2j/gameserver/geoengine/GeoEngine.java (révision 568)
2320@@ -43,7 +43,7 @@
2321 import net.sf.l2j.gameserver.geoengine.geodata.IGeoObject;
2322 import net.sf.l2j.gameserver.idfactory.IdFactory;
2323 import net.sf.l2j.gameserver.model.L2Object;
2324-import net.sf.l2j.gameserver.model.L2World;
2325+import net.sf.l2j.gameserver.model.World;
2326 import net.sf.l2j.gameserver.model.Location;
2327 import net.sf.l2j.gameserver.model.actor.L2Character;
2328 import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
2329@@ -93,9 +93,9 @@
2330 final ExProperties props = Config.initProperties(Config.GEOENGINE_FILE);
2331 int loaded = 0;
2332 int failed = 0;
2333- for (int rx = L2World.TILE_X_MIN; rx <= L2World.TILE_X_MAX; rx++)
2334+ for (int rx = World.TILE_X_MIN; rx <= World.TILE_X_MAX; rx++)
2335 {
2336- for (int ry = L2World.TILE_Y_MIN; ry <= L2World.TILE_Y_MAX; ry++)
2337+ for (int ry = World.TILE_Y_MIN; ry <= World.TILE_Y_MAX; ry++)
2338 {
2339 if (props.containsKey(String.valueOf(rx) + "_" + String.valueOf(ry)))
2340 {
2341@@ -158,8 +158,8 @@
2342 buffer.order(ByteOrder.LITTLE_ENDIAN);
2343
2344 // get block indexes
2345- final int blockX = (regionX - L2World.TILE_X_MIN) * GeoStructure.REGION_BLOCKS_X;
2346- final int blockY = (regionY - L2World.TILE_Y_MIN) * GeoStructure.REGION_BLOCKS_Y;
2347+ final int blockX = (regionX - World.TILE_X_MIN) * GeoStructure.REGION_BLOCKS_X;
2348+ final int blockY = (regionY - World.TILE_Y_MIN) * GeoStructure.REGION_BLOCKS_Y;
2349
2350 // loop over region blocks
2351 for (int ix = 0; ix < GeoStructure.REGION_BLOCKS_X; ix++)
2352@@ -220,8 +220,8 @@
2353 private final void loadNullBlocks(int regionX, int regionY)
2354 {
2355 // get block indexes
2356- final int blockX = (regionX - L2World.TILE_X_MIN) * GeoStructure.REGION_BLOCKS_X;
2357- final int blockY = (regionY - L2World.TILE_Y_MIN) * GeoStructure.REGION_BLOCKS_Y;
2358+ final int blockX = (regionX - World.TILE_X_MIN) * GeoStructure.REGION_BLOCKS_X;
2359+ final int blockY = (regionY - World.TILE_Y_MIN) * GeoStructure.REGION_BLOCKS_Y;
2360
2361 // load all null blocks
2362 for (int ix = 0; ix < GeoStructure.REGION_BLOCKS_X; ix++)
2363@@ -238,7 +238,7 @@
2364 */
2365 public static final int getGeoX(int worldX)
2366 {
2367- return (MathUtil.limit(worldX, L2World.WORLD_X_MIN, L2World.WORLD_X_MAX) - L2World.WORLD_X_MIN) >> 4;
2368+ return (MathUtil.limit(worldX, World.WORLD_X_MIN, World.WORLD_X_MAX) - World.WORLD_X_MIN) >> 4;
2369 }
2370
2371 /**
2372@@ -248,7 +248,7 @@
2373 */
2374 public static final int getGeoY(int worldY)
2375 {
2376- return (MathUtil.limit(worldY, L2World.WORLD_Y_MIN, L2World.WORLD_Y_MAX) - L2World.WORLD_Y_MIN) >> 4;
2377+ return (MathUtil.limit(worldY, World.WORLD_Y_MIN, World.WORLD_Y_MAX) - World.WORLD_Y_MIN) >> 4;
2378 }
2379
2380 /**
2381@@ -258,7 +258,7 @@
2382 */
2383 public static final int getWorldX(int geoX)
2384 {
2385- return (MathUtil.limit(geoX, 0, GeoStructure.GEO_CELLS_X) << 4) + L2World.WORLD_X_MIN + 8;
2386+ return (MathUtil.limit(geoX, 0, GeoStructure.GEO_CELLS_X) << 4) + World.WORLD_X_MIN + 8;
2387 }
2388
2389 /**
2390@@ -268,7 +268,7 @@
2391 */
2392 public static final int getWorldY(int geoY)
2393 {
2394- return (MathUtil.limit(geoY, 0, GeoStructure.GEO_CELLS_Y) << 4) + L2World.WORLD_Y_MIN + 8;
2395+ return (MathUtil.limit(geoY, 0, GeoStructure.GEO_CELLS_Y) << 4) + World.WORLD_Y_MIN + 8;
2396 }
2397
2398 /**
2399@@ -1184,8 +1184,8 @@
2400 int gox = getGeoX(loc.getX());
2401 int goy = getGeoY(loc.getY());
2402 int goz = loc.getZ();
2403- int rx = gox / GeoStructure.REGION_CELLS_X + L2World.TILE_X_MIN;
2404- int ry = goy / GeoStructure.REGION_CELLS_Y + L2World.TILE_Y_MIN;
2405+ int rx = gox / GeoStructure.REGION_CELLS_X + World.TILE_X_MIN;
2406+ int ry = goy / GeoStructure.REGION_CELLS_Y + World.TILE_Y_MIN;
2407 int bx = (gox / GeoStructure.BLOCK_CELLS_X) % GeoStructure.REGION_BLOCKS_X;
2408 int by = (goy / GeoStructure.BLOCK_CELLS_Y) % GeoStructure.REGION_BLOCKS_Y;
2409 int cx = gox % GeoStructure.BLOCK_CELLS_X;
2410Index: GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2GuardInstance.java
2411===================================================================
2412--- GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2GuardInstance.java (révision 553)
2413+++ GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2GuardInstance.java (révision 568)
2414@@ -97,21 +97,28 @@
2415 }
2416 else
2417 {
2418+ // Rotate the player to face the instance
2419+ player.sendPacket(new MoveToPawn(player, this, L2Npc.INTERACTION_DISTANCE));
2420+
2421+ // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
2422+ player.sendPacket(ActionFailed.STATIC_PACKET);
2423+
2424 // Some guards have no HTMs on retail. Bypass the chat window if such guard is met.
2425 switch (getNpcId())
2426 {
2427- case 31671:
2428+ case 30733: // Guards in start villages
2429+ case 31032:
2430+ case 31033:
2431+ case 31034:
2432+ case 31035:
2433+ case 31036:
2434+ case 31671: // Patrols
2435 case 31672:
2436 case 31673:
2437 case 31674:
2438- // Send a Server->Client ActionFailed to the L2PcInstance in order to avoid that the client wait another packet
2439- player.sendPacket(ActionFailed.STATIC_PACKET);
2440 return;
2441 }
2442
2443- // Rotate the player to face the instance
2444- player.sendPacket(new MoveToPawn(player, this, L2Npc.INTERACTION_DISTANCE));
2445-
2446 if (hasRandomAnimation())
2447 onRandomAnimation(Rnd.get(8));
2448
2449@@ -135,17 +142,8 @@
2450 }
2451
2452 @Override
2453- public boolean returnHome()
2454+ public int getDriftRange()
2455 {
2456- getAggroList().clear();
2457-
2458- if (getMoveSpeed() > 0 && hasAI() && getSpawn() != null && !isInsideRadius(getSpawn().getLocX(), getSpawn().getLocY(), 20, false))
2459- {
2460- setIsReturningToSpawnPoint(true);
2461- setWalking();
2462- getAI().setIntention(CtrlIntention.MOVE_TO, getSpawn().getLoc());
2463- return true;
2464- }
2465- return false;
2466+ return 20;
2467 }
2468 }
2469\ No newline at end of file
2470Index: GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PetInstance.java
2471===================================================================
2472--- GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PetInstance.java (révision 553)
2473+++ GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PetInstance.java (révision 568)
2474@@ -38,7 +38,7 @@
2475 import net.sf.l2j.gameserver.model.L2Object;
2476 import net.sf.l2j.gameserver.model.L2Party;
2477 import net.sf.l2j.gameserver.model.L2Skill;
2478-import net.sf.l2j.gameserver.model.L2World;
2479+import net.sf.l2j.gameserver.model.World;
2480 import net.sf.l2j.gameserver.model.PetDataEntry;
2481 import net.sf.l2j.gameserver.model.actor.L2Character;
2482 import net.sf.l2j.gameserver.model.actor.L2Summon;
2483@@ -177,7 +177,7 @@
2484 public synchronized static L2PetInstance spawnPet(NpcTemplate template, L2PcInstance owner, ItemInstance control)
2485 {
2486 // Owner has a pet listed in world.
2487- if (L2World.getInstance().getPet(owner.getObjectId()) != null)
2488+ if (World.getInstance().getPet(owner.getObjectId()) != null)
2489 return null;
2490
2491 // Add the pet instance to world.
2492@@ -185,7 +185,7 @@
2493 if (pet != null)
2494 {
2495 pet.setTitle(owner.getName());
2496- L2World.getInstance().addPet(owner.getObjectId(), pet);
2497+ World.getInstance().addPet(owner.getObjectId(), pet);
2498 }
2499
2500 return pet;
2501@@ -606,7 +606,7 @@
2502 public void destroyControlItem(L2PcInstance owner)
2503 {
2504 // remove the pet instance from world
2505- L2World.getInstance().removePet(owner.getObjectId());
2506+ World.getInstance().removePet(owner.getObjectId());
2507
2508 // delete from inventory
2509 try
2510@@ -628,7 +628,7 @@
2511
2512 owner.broadcastUserInfo();
2513
2514- L2World.getInstance().removeObject(removedItem);
2515+ World.getInstance().removeObject(removedItem);
2516 }
2517 }
2518 catch (Exception e)
2519@@ -782,7 +782,7 @@
2520
2521 // Drop pet from world's pet list.
2522 if (!isDead())
2523- L2World.getInstance().removePet(owner.getObjectId());
2524+ World.getInstance().removePet(owner.getObjectId());
2525 }
2526
2527 /**
2528@@ -854,8 +854,8 @@
2529 int oldOwnerId = getOwner().getObjectId();
2530
2531 setOwner(owner);
2532- L2World.getInstance().removePet(oldOwnerId);
2533- L2World.getInstance().addPet(oldOwnerId, this);
2534+ World.getInstance().removePet(oldOwnerId);
2535+ World.getInstance().addPet(oldOwnerId, this);
2536 }
2537
2538 public int getCurrentLoad()
2539Index: GameServer/java/net/sf/l2j/gameserver/model/actor/L2Character.java
2540===================================================================
2541--- GameServer/java/net/sf/l2j/gameserver/model/actor/L2Character.java (révision 553)
2542+++ GameServer/java/net/sf/l2j/gameserver/model/actor/L2Character.java (révision 568)
2543@@ -46,8 +46,8 @@
2544 import net.sf.l2j.gameserver.model.L2Party;
2545 import net.sf.l2j.gameserver.model.L2Skill;
2546 import net.sf.l2j.gameserver.model.L2Skill.SkillTargetType;
2547-import net.sf.l2j.gameserver.model.L2World;
2548-import net.sf.l2j.gameserver.model.L2WorldRegion;
2549+import net.sf.l2j.gameserver.model.World;
2550+import net.sf.l2j.gameserver.model.WorldRegion;
2551 import net.sf.l2j.gameserver.model.Location;
2552 import net.sf.l2j.gameserver.model.ShotType;
2553 import net.sf.l2j.gameserver.model.SpawnLocation;
2554@@ -84,6 +84,7 @@
2555 import net.sf.l2j.gameserver.network.serverpackets.Revive;
2556 import net.sf.l2j.gameserver.network.serverpackets.ServerObjectInfo;
2557 import net.sf.l2j.gameserver.network.serverpackets.SetupGauge;
2558+import net.sf.l2j.gameserver.network.serverpackets.SetupGauge.GaugeColor;
2559 import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
2560 import net.sf.l2j.gameserver.network.serverpackets.StopMove;
2561 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
2562@@ -805,7 +806,7 @@
2563 sendPacket(SystemMessage.getSystemMessage(SystemMessageId.GETTING_READY_TO_SHOOT_AN_ARROW));
2564
2565 // Send SetupGauge
2566- sendPacket(new SetupGauge(SetupGauge.RED, sAtk + reuse));
2567+ sendPacket(new SetupGauge(GaugeColor.RED, sAtk + reuse));
2568 }
2569
2570 // Create a new hit task with Medium priority
2571@@ -1322,7 +1323,7 @@
2572 {
2573 // Send SetupGauge with the color of the gauge and the casting time
2574 if (this instanceof L2PcInstance && !effectWhileCasting)
2575- sendPacket(new SetupGauge(SetupGauge.BLUE, hitTime));
2576+ sendPacket(new SetupGauge(GaugeColor.BLUE, hitTime));
2577
2578 if (effectWhileCasting)
2579 mut.phase = 2;
2580@@ -1408,7 +1409,7 @@
2581 // prevent casting signets to peace zone
2582 if (skill.getSkillType() == L2SkillType.SIGNET || skill.getSkillType() == L2SkillType.SIGNET_CASTTIME)
2583 {
2584- final L2WorldRegion region = getRegion();
2585+ final WorldRegion region = getRegion();
2586 if (region == null)
2587 return false;
2588
2589@@ -1535,7 +1536,7 @@
2590 if (hasAI())
2591 getAI().notifyEvent(CtrlEvent.EVT_DEAD, null);
2592
2593- final L2WorldRegion region = getRegion();
2594+ final WorldRegion region = getRegion();
2595 if (region != null)
2596 region.onDeath(this);
2597
2598@@ -1570,7 +1571,7 @@
2599 // Start broadcast status
2600 broadcastPacket(new Revive(this));
2601
2602- final L2WorldRegion region = getRegion();
2603+ final WorldRegion region = getRegion();
2604 if (region != null)
2605 region.onRevive(this);
2606 }
2607@@ -3445,8 +3446,8 @@
2608 int originalX = x;
2609 int originalY = y;
2610 int originalZ = z;
2611- int gtx = (originalX - L2World.WORLD_X_MIN) >> 4;
2612- int gty = (originalY - L2World.WORLD_Y_MIN) >> 4;
2613+ int gtx = (originalX - World.WORLD_X_MIN) >> 4;
2614+ int gty = (originalY - World.WORLD_Y_MIN) >> 4;
2615
2616 // Movement checks:
2617 // when geodata == 2, for all characters except mobs returning home (could be changed later to teleport if pathfinding fails)
2618@@ -3469,7 +3470,7 @@
2619 }
2620 }
2621
2622- if (curX < L2World.WORLD_X_MIN || curX > L2World.WORLD_X_MAX || curY < L2World.WORLD_Y_MIN || curY > L2World.WORLD_Y_MAX)
2623+ if (curX < World.WORLD_X_MIN || curX > World.WORLD_X_MAX || curY < World.WORLD_Y_MIN || curY > World.WORLD_Y_MAX)
2624 {
2625 // Temporary fix for character outside world region errors
2626 _log.warning("Character " + getName() + " outside world area, in coordinates x:" + curX + " y:" + curY);
2627@@ -4096,7 +4097,7 @@
2628 {
2629 try
2630 {
2631- L2WorldRegion region = L2World.getInstance().getRegion(getX(), getY());
2632+ WorldRegion region = World.getInstance().getRegion(getX(), getY());
2633 return ((region != null) && (region.isActive()));
2634 }
2635 catch (Exception e)
2636@@ -5527,7 +5528,7 @@
2637 }
2638
2639 @Override
2640- public final void setRegion(L2WorldRegion value)
2641+ public final void setRegion(WorldRegion value)
2642 {
2643 // confirm revalidation of old region's zones
2644 if (getRegion() != null)
2645Index: GameServer/java/net/sf/l2j/gameserver/model/L2Object.java
2646===================================================================
2647--- GameServer/java/net/sf/l2j/gameserver/model/L2Object.java (révision 553)
2648+++ GameServer/java/net/sf/l2j/gameserver/model/L2Object.java (révision 568)
2649@@ -49,7 +49,7 @@
2650 private int _polyId;
2651
2652 private SpawnLocation _position = new SpawnLocation(0, 0, 0, 0);
2653- private L2WorldRegion _region;
2654+ private WorldRegion _region;
2655
2656 private boolean _isVisible;
2657
2658@@ -57,7 +57,7 @@
2659 {
2660 _objectId = objectId;
2661
2662- setRegion(L2World.getInstance().getRegion(_position));
2663+ setRegion(World.getInstance().getRegion(_position));
2664 }
2665
2666 public void onAction(L2PcInstance player)
2667@@ -86,7 +86,7 @@
2668 {
2669 assert _region != null;
2670
2671- final L2WorldRegion region = _region;
2672+ final WorldRegion region = _region;
2673
2674 synchronized (this)
2675 {
2676@@ -95,13 +95,13 @@
2677 }
2678
2679 // Out of synchronized to avoid deadlocks
2680- L2World.getInstance().removeVisibleObject(this, region);
2681- L2World.getInstance().removeObject(this);
2682+ World.getInstance().removeVisibleObject(this, region);
2683+ World.getInstance().removeObject(this);
2684 }
2685
2686 public void refreshID()
2687 {
2688- L2World.getInstance().removeObject(this);
2689+ World.getInstance().removeObject(this);
2690 IdFactory.getInstance().releaseId(getObjectId());
2691 _objectId = IdFactory.getInstance().getNextId();
2692 }
2693@@ -117,17 +117,17 @@
2694 {
2695 // Set the x,y,z position of the L2Object spawn and update its _worldregion
2696 _isVisible = true;
2697- setRegion(L2World.getInstance().getRegion(_position));
2698+ setRegion(World.getInstance().getRegion(_position));
2699 }
2700
2701 // Add the L2Object spawn in the _allobjects of L2World
2702- L2World.getInstance().addObject(this);
2703+ World.getInstance().addObject(this);
2704
2705 // Add the L2Object spawn to _visibleObjects and if necessary to _allplayers of its L2WorldRegion
2706 _region.addVisibleObject(this);
2707
2708 // Add the L2Object spawn in the world as a visible object -- out of synchronized to avoid deadlocks
2709- L2World.getInstance().addVisibleObject(this, _region);
2710+ World.getInstance().addVisibleObject(this, _region);
2711
2712 onSpawn();
2713 }
2714@@ -141,27 +141,27 @@
2715 // Set the x,y,z position of the L2Object spawn and update its _worldregion
2716 _isVisible = true;
2717
2718- if (x > L2World.WORLD_X_MAX)
2719- x = L2World.WORLD_X_MAX - 5000;
2720- if (x < L2World.WORLD_X_MIN)
2721- x = L2World.WORLD_X_MIN + 5000;
2722- if (y > L2World.WORLD_Y_MAX)
2723- y = L2World.WORLD_Y_MAX - 5000;
2724- if (y < L2World.WORLD_Y_MIN)
2725- y = L2World.WORLD_Y_MIN + 5000;
2726+ if (x > World.WORLD_X_MAX)
2727+ x = World.WORLD_X_MAX - 5000;
2728+ if (x < World.WORLD_X_MIN)
2729+ x = World.WORLD_X_MIN + 5000;
2730+ if (y > World.WORLD_Y_MAX)
2731+ y = World.WORLD_Y_MAX - 5000;
2732+ if (y < World.WORLD_Y_MIN)
2733+ y = World.WORLD_Y_MIN + 5000;
2734
2735 _position.set(x, y, z);
2736- setRegion(L2World.getInstance().getRegion(_position));
2737+ setRegion(World.getInstance().getRegion(_position));
2738 }
2739
2740 // Add the L2Object spawn in the _allobjects of L2World
2741- L2World.getInstance().addObject(this);
2742+ World.getInstance().addObject(this);
2743
2744 // Add the L2Object spawn to _visibleObjects and if necessary to _allplayers of its L2WorldRegion
2745 _region.addVisibleObject(this);
2746
2747 // Add the L2Object spawn in the world as a visible object
2748- L2World.getInstance().addVisibleObject(this, _region);
2749+ World.getInstance().addVisibleObject(this, _region);
2750
2751 onSpawn();
2752 }
2753@@ -352,7 +352,7 @@
2754 if (!isVisible())
2755 return;
2756
2757- final L2WorldRegion region = L2World.getInstance().getRegion(_position);
2758+ final WorldRegion region = World.getInstance().getRegion(_position);
2759 if (region != _region)
2760 {
2761 _region.removeVisibleObject(this);
2762@@ -387,14 +387,14 @@
2763 {
2764 assert _region == null;
2765
2766- if (x > L2World.WORLD_X_MAX)
2767- x = L2World.WORLD_X_MAX - 5000;
2768- if (x < L2World.WORLD_X_MIN)
2769- x = L2World.WORLD_X_MIN + 5000;
2770- if (y > L2World.WORLD_Y_MAX)
2771- y = L2World.WORLD_Y_MAX - 5000;
2772- if (y < L2World.WORLD_Y_MIN)
2773- y = L2World.WORLD_Y_MIN + 5000;
2774+ if (x > World.WORLD_X_MAX)
2775+ x = World.WORLD_X_MAX - 5000;
2776+ if (x < World.WORLD_X_MIN)
2777+ x = World.WORLD_X_MIN + 5000;
2778+ if (y > World.WORLD_Y_MAX)
2779+ y = World.WORLD_Y_MAX - 5000;
2780+ if (y < World.WORLD_Y_MIN)
2781+ y = World.WORLD_Y_MIN + 5000;
2782
2783 _position.set(x, y, z);
2784 setIsVisible(false);
2785@@ -435,12 +435,12 @@
2786 return _position;
2787 }
2788
2789- public final L2WorldRegion getRegion()
2790+ public final WorldRegion getRegion()
2791 {
2792 return _region;
2793 }
2794
2795- public void setRegion(L2WorldRegion value)
2796+ public void setRegion(WorldRegion value)
2797 {
2798 _region = value;
2799 }
2800Index: GameServer/java/net/sf/l2j/gameserver/instancemanager/CoupleManager.java
2801===================================================================
2802--- GameServer/java/net/sf/l2j/gameserver/instancemanager/CoupleManager.java (révision 553)
2803+++ GameServer/java/net/sf/l2j/gameserver/instancemanager/CoupleManager.java (révision 568)
2804@@ -17,125 +17,145 @@
2805 import java.sql.Connection;
2806 import java.sql.PreparedStatement;
2807 import java.sql.ResultSet;
2808-import java.util.ArrayList;
2809-import java.util.List;
2810+import java.util.Map;
2811+import java.util.Map.Entry;
2812+import java.util.concurrent.ConcurrentHashMap;
2813 import java.util.logging.Level;
2814 import java.util.logging.Logger;
2815
2816 import net.sf.l2j.L2DatabaseFactory;
2817-import net.sf.l2j.gameserver.model.L2World;
2818+import net.sf.l2j.gameserver.idfactory.IdFactory;
2819+import net.sf.l2j.gameserver.model.World;
2820 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
2821-import net.sf.l2j.gameserver.model.entity.Couple;
2822+import net.sf.l2j.gameserver.model.holder.IntIntHolder;
2823
2824-/**
2825- * @author evill33t
2826- */
2827 public class CoupleManager
2828 {
2829 private static final Logger _log = Logger.getLogger(CoupleManager.class.getName());
2830
2831+ private final Map<Integer, IntIntHolder> _couples = new ConcurrentHashMap<>();
2832+
2833 protected CoupleManager()
2834 {
2835- load();
2836- }
2837-
2838- public static final CoupleManager getInstance()
2839- {
2840- return SingletonHolder._instance;
2841- }
2842-
2843- private List<Couple> _couples;
2844-
2845- public void reload()
2846- {
2847- _couples.clear();
2848- load();
2849- }
2850-
2851- private final void load()
2852- {
2853- _couples = new ArrayList<>();
2854-
2855 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
2856 {
2857- PreparedStatement statement = con.prepareStatement("SELECT id FROM mods_wedding ORDER BY id");
2858- ResultSet rs = statement.executeQuery();
2859+ PreparedStatement ps = con.prepareStatement("SELECT * FROM mods_wedding");
2860
2861+ ResultSet rs = ps.executeQuery();
2862 while (rs.next())
2863- _couples.add(new Couple(rs.getInt("id")));
2864+ _couples.put(rs.getInt("id"), new IntIntHolder(rs.getInt("requesterId"), rs.getInt("partnerId")));
2865
2866 rs.close();
2867- statement.close();
2868+ ps.close();
2869
2870- _log.info("CoupleManager : Loaded " + getCouples().size() + " couples.");
2871+ _log.info("CoupleManager : Loaded " + _couples.size() + " couples.");
2872 }
2873 catch (Exception e)
2874 {
2875- _log.log(Level.WARNING, "Exception: CoupleManager.load(): " + e.getMessage(), e);
2876+ _log.log(Level.WARNING, "CoupleManager: " + e.getMessage(), e);
2877 }
2878 }
2879
2880- public final Couple getCouple(int coupleId)
2881+ public final Map<Integer, IntIntHolder> getCouples()
2882 {
2883- int index = getCoupleIndex(coupleId);
2884- if (index >= 0)
2885- return _couples.get(index);
2886+ return _couples;
2887+ }
2888+
2889+ public final IntIntHolder getCouple(int coupleId)
2890+ {
2891+ return _couples.get(coupleId);
2892+ }
2893+
2894+ /**
2895+ * Add a couple to the couples map. Both players must be logged.
2896+ * @param requester : The wedding requester.
2897+ * @param partner : The wedding partner.
2898+ */
2899+ public void addCouple(L2PcInstance requester, L2PcInstance partner)
2900+ {
2901+ if (requester == null || partner == null)
2902+ return;
2903
2904- return null;
2905+ final int coupleId = IdFactory.getInstance().getNextId();
2906+
2907+ _couples.put(coupleId, new IntIntHolder(requester.getObjectId(), partner.getObjectId()));
2908+
2909+ requester.setCoupleId(coupleId);
2910+ partner.setCoupleId(coupleId);
2911 }
2912
2913- public void createCouple(L2PcInstance player1, L2PcInstance player2)
2914+ /**
2915+ * Delete the couple. If players are logged, reset wedding variables.
2916+ * @param coupleId : The couple id to delete.
2917+ */
2918+ public void deleteCouple(int coupleId)
2919 {
2920- if (player1 != null && player2 != null)
2921+ final IntIntHolder couple = _couples.remove(coupleId);
2922+ if (couple == null)
2923+ return;
2924+
2925+ final L2PcInstance requester = World.getInstance().getPlayer(couple.getId());
2926+ if (requester != null)
2927 {
2928- Couple _new = new Couple(player1, player2);
2929- _couples.add(_new);
2930- player1.setCoupleId(_new.getId());
2931- player2.setCoupleId(_new.getId());
2932+ requester.setCoupleId(0);
2933+ requester.sendMessage("You are now divorced.");
2934 }
2935+
2936+ final L2PcInstance partner = World.getInstance().getPlayer(couple.getValue());
2937+ if (partner != null)
2938+ {
2939+ partner.setCoupleId(0);
2940+ partner.sendMessage("You are now divorced.");
2941+ }
2942 }
2943
2944- public void deleteCouple(int coupleId)
2945+ /**
2946+ * Save all couples on shutdown. Delete previous SQL infos.
2947+ */
2948+ public void save()
2949 {
2950- int index = getCoupleIndex(coupleId);
2951- Couple couple = _couples.get(index);
2952- if (couple != null)
2953+ try (Connection con = L2DatabaseFactory.getInstance().getConnection())
2954 {
2955- L2PcInstance player1 = L2World.getInstance().getPlayer(couple.getPlayer1Id());
2956- L2PcInstance player2 = L2World.getInstance().getPlayer(couple.getPlayer2Id());
2957+ PreparedStatement ps = con.prepareStatement("DELETE FROM mods_wedding");
2958+ ps.execute();
2959+ ps.close();
2960
2961- if (player1 != null)
2962+ ps = con.prepareStatement("INSERT INTO mods_wedding (id, requesterId, partnerId) VALUES (?,?,?)");
2963+ for (Entry<Integer, IntIntHolder> coupleEntry : _couples.entrySet())
2964 {
2965- player1.setMarried(false);
2966- player1.setCoupleId(0);
2967+ final IntIntHolder couple = coupleEntry.getValue();
2968+
2969+ ps.setInt(1, coupleEntry.getKey());
2970+ ps.setInt(2, couple.getId());
2971+ ps.setInt(3, couple.getValue());
2972+ ps.addBatch();
2973 }
2974-
2975- if (player2 != null)
2976- {
2977- player2.setMarried(false);
2978- player2.setCoupleId(0);
2979- }
2980- couple.divorce();
2981- _couples.remove(index);
2982+ ps.executeBatch();
2983+ ps.close();
2984 }
2985+ catch (Exception e)
2986+ {
2987+ _log.log(Level.WARNING, "CoupleManager: " + e.getMessage(), e);
2988+ }
2989 }
2990
2991- public final int getCoupleIndex(int coupleId)
2992+ /**
2993+ * @param coupleId : The couple id to check.
2994+ * @param objectId : The player objectId to check.
2995+ * @return the partner objectId, or 0 if not found.
2996+ */
2997+ public final int getPartnerId(int coupleId, int objectId)
2998 {
2999- int i = 0;
3000- for (Couple temp : _couples)
3001- {
3002- if (temp != null && temp.getId() == coupleId)
3003- return i;
3004-
3005- i++;
3006- }
3007- return -1;
3008+ final IntIntHolder couple = _couples.get(coupleId);
3009+ if (couple == null)
3010+ return 0;
3011+
3012+ return (couple.getId() == objectId) ? couple.getValue() : couple.getId();
3013 }
3014
3015- public final List<Couple> getCouples()
3016+ public static final CoupleManager getInstance()
3017 {
3018- return _couples;
3019+ return SingletonHolder._instance;
3020 }
3021
3022 private static class SingletonHolder
3023Index: GameServer/java/net/sf/l2j/gameserver/instancemanager/ZoneManager.java
3024===================================================================
3025--- GameServer/java/net/sf/l2j/gameserver/instancemanager/ZoneManager.java (révision 553)
3026+++ GameServer/java/net/sf/l2j/gameserver/instancemanager/ZoneManager.java (révision 568)
3027@@ -30,8 +30,8 @@
3028 import net.sf.l2j.Config;
3029 import net.sf.l2j.L2DatabaseFactory;
3030 import net.sf.l2j.gameserver.model.L2Object;
3031-import net.sf.l2j.gameserver.model.L2World;
3032-import net.sf.l2j.gameserver.model.L2WorldRegion;
3033+import net.sf.l2j.gameserver.model.World;
3034+import net.sf.l2j.gameserver.model.WorldRegion;
3035 import net.sf.l2j.gameserver.model.actor.L2Character;
3036 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
3037 import net.sf.l2j.gameserver.model.zone.L2SpawnZone;
3038@@ -82,9 +82,9 @@
3039
3040 // remove zones from world
3041 int count = 0;
3042- for (L2WorldRegion[] worldRegion : L2World.getInstance().getWorldRegions())
3043+ for (WorldRegion[] worldRegion : World.getInstance().getWorldRegions())
3044 {
3045- for (L2WorldRegion element : worldRegion)
3046+ for (WorldRegion element : worldRegion)
3047 {
3048 element.getZones().clear();
3049 count++;
3050@@ -101,7 +101,7 @@
3051 load();
3052
3053 // revalidate objects in zones
3054- for (L2Object o : L2World.getInstance().getObjects())
3055+ for (L2Object o : World.getInstance().getObjects())
3056 {
3057 if (o instanceof L2Character)
3058 ((L2Character) o).revalidateZone(true);
3059@@ -111,7 +111,7 @@
3060 private final void load()
3061 {
3062 // Get the world regions
3063- L2WorldRegion[][] worldRegions = L2World.getInstance().getWorldRegions();
3064+ WorldRegion[][] worldRegions = World.getInstance().getWorldRegions();
3065
3066 // Load the zone xml
3067 try
3068@@ -148,7 +148,7 @@
3069 _log.info("ZoneManager: Loaded " + _classZones.size() + " zones classes and total " + size + " zones.");
3070 }
3071
3072- private void loadFileZone(final File f, L2WorldRegion[][] worldRegions) throws Exception
3073+ private void loadFileZone(final File f, WorldRegion[][] worldRegions) throws Exception
3074 {
3075 final Document doc = XMLDocumentFactory.getInstance().loadDocument(f);
3076 for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling())
3077@@ -317,7 +317,7 @@
3078 {
3079 for (int y = 0; y < worldRegions[x].length; y++)
3080 {
3081- if (temp.getZone().intersectsRectangle(L2World.getRegionX(x), L2World.getRegionX(x + 1), L2World.getRegionY(y), L2World.getRegionY(y + 1)))
3082+ if (temp.getZone().intersectsRectangle(World.getRegionX(x), World.getRegionX(x + 1), World.getRegionY(y), World.getRegionY(y + 1)))
3083 {
3084 if (Config.DEBUG)
3085 _log.info("Zone (" + zoneId + ") added to: " + x + " " + y);
3086@@ -469,7 +469,7 @@
3087 public List<L2ZoneType> getZones(int x, int y)
3088 {
3089 final List<L2ZoneType> temp = new ArrayList<>();
3090- for (L2ZoneType zone : L2World.getInstance().getRegion(x, y).getZones())
3091+ for (L2ZoneType zone : World.getInstance().getRegion(x, y).getZones())
3092 {
3093 if (zone.isInsideZone(x, y))
3094 temp.add(zone);
3095@@ -487,7 +487,7 @@
3096 public List<L2ZoneType> getZones(int x, int y, int z)
3097 {
3098 final List<L2ZoneType> temp = new ArrayList<>();
3099- for (L2ZoneType zone : L2World.getInstance().getRegion(x, y).getZones())
3100+ for (L2ZoneType zone : World.getInstance().getRegion(x, y).getZones())
3101 {
3102 if (zone.isInsideZone(x, y, z))
3103 temp.add(zone);
3104@@ -507,7 +507,7 @@
3105 @SuppressWarnings("unchecked")
3106 public <T extends L2ZoneType> T getZone(int x, int y, int z, Class<T> type)
3107 {
3108- for (L2ZoneType zone : L2World.getInstance().getRegion(x, y).getZones())
3109+ for (L2ZoneType zone : World.getInstance().getRegion(x, y).getZones())
3110 {
3111 if (zone.isInsideZone(x, y, z) && type.isInstance(zone))
3112 return (T) zone;
3113Index: GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SepulcherNpcInstance.java
3114===================================================================
3115--- GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SepulcherNpcInstance.java (révision 553)
3116+++ GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SepulcherNpcInstance.java (révision 568)
3117@@ -23,7 +23,7 @@
3118 import net.sf.l2j.gameserver.ai.CtrlIntention;
3119 import net.sf.l2j.gameserver.datatables.DoorTable;
3120 import net.sf.l2j.gameserver.instancemanager.FourSepulchersManager;
3121-import net.sf.l2j.gameserver.model.L2World;
3122+import net.sf.l2j.gameserver.model.World;
3123 import net.sf.l2j.gameserver.model.actor.L2Npc;
3124 import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
3125 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
3126@@ -374,7 +374,7 @@
3127 return;// wrong usage
3128
3129 final CreatureSay sm = new CreatureSay(0, Say2.SHOUT, getName(), msg);
3130- for (L2PcInstance player : L2World.getInstance().getPlayers())
3131+ for (L2PcInstance player : World.getInstance().getPlayers())
3132 {
3133 if (Util.checkIfInRange(15000, player, this, true))
3134 player.sendPacket(sm);
3135Index: GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2CastleTeleporterInstance.java
3136===================================================================
3137--- GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2CastleTeleporterInstance.java (révision 553)
3138+++ GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2CastleTeleporterInstance.java (révision 568)
3139@@ -19,7 +19,7 @@
3140 import net.sf.l2j.commons.concurrent.ThreadPool;
3141
3142 import net.sf.l2j.gameserver.datatables.MapRegionTable;
3143-import net.sf.l2j.gameserver.model.L2World;
3144+import net.sf.l2j.gameserver.model.World;
3145 import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
3146 import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
3147 import net.sf.l2j.gameserver.network.serverpackets.NpcSay;
3148@@ -102,7 +102,7 @@
3149 final NpcSay cs = new NpcSay(getObjectId(), 1, getNpcId(), "The defenders of " + getCastle().getName() + " castle have been teleported to the inner castle.");
3150 final int region = MapRegionTable.getMapRegion(getX(), getY());
3151
3152- for (L2PcInstance player : L2World.getInstance().getPlayers())
3153+ for (L2PcInstance player : World.getInstance().getPlayers())
3154 {
3155 if (region == MapRegionTable.getMapRegion(player.getX(), player.getY()))
3156 player.sendPacket(cs);
3157Index: GameServer/java/net/sf/l2j/gameserver/model/actor/L2Attackable.java
3158===================================================================
3159--- GameServer/java/net/sf/l2j/gameserver/model/actor/L2Attackable.java (révision 553)
3160+++ GameServer/java/net/sf/l2j/gameserver/model/actor/L2Attackable.java (révision 568)
3161@@ -1218,11 +1218,12 @@
3162 getAI().setIntention(CtrlIntention.CAST, skill, target);
3163 }
3164
3165- public boolean returnHome()
3166+ public final boolean returnHome(boolean cleanAggro)
3167 {
3168- _aggroList.clear();
3169+ if (cleanAggro)
3170+ _aggroList.clear();
3171
3172- if (getMoveSpeed() > 0 && hasAI() && getSpawn() != null && !isInsideRadius(getSpawn().getLocX(), getSpawn().getLocY(), Config.MAX_DRIFT_RANGE, false))
3173+ if (hasAI() && !isDead() && getMoveSpeed() > 0 && getSpawn() != null && !isInsideRadius(getSpawn().getLocX(), getSpawn().getLocY(), getDriftRange(), false))
3174 {
3175 setIsReturningToSpawnPoint(true);
3176 setWalking();
3177@@ -1232,6 +1233,11 @@
3178 return false;
3179 }
3180
3181+ public int getDriftRange()
3182+ {
3183+ return Config.MAX_DRIFT_RANGE;
3184+ }
3185+
3186 public final Set<L2Character> getAttackByList()
3187 {
3188 return _attackByList;
3189Index: GameServer/java/net/sf/l2j/gameserver/model/L2Effect.java
3190===================================================================
3191--- GameServer/java/net/sf/l2j/gameserver/model/L2Effect.java (révision 553)
3192+++ GameServer/java/net/sf/l2j/gameserver/model/L2Effect.java (révision 568)
3193@@ -542,4 +542,9 @@
3194 {
3195 return false;
3196 }
3197+
3198+ public boolean onSameEffect(L2Effect effect)
3199+ {
3200+ return true;
3201+ }
3202 }
3203\ No newline at end of file
3204Index: GameServer/java/net/sf/l2j/gameserver/instancemanager/SevenSignsFestival.java
3205===================================================================
3206--- GameServer/java/net/sf/l2j/gameserver/instancemanager/SevenSignsFestival.java (révision 553)
3207+++ GameServer/java/net/sf/l2j/gameserver/instancemanager/SevenSignsFestival.java (révision 568)
3208@@ -41,7 +41,7 @@
3209 import net.sf.l2j.gameserver.model.L2Party;
3210 import net.sf.l2j.gameserver.model.L2Party.MessageType;
3211 import net.sf.l2j.gameserver.model.L2Spawn;
3212-import net.sf.l2j.gameserver.model.L2World;
3213+import net.sf.l2j.gameserver.model.World;
3214 import net.sf.l2j.gameserver.model.Location;
3215 import net.sf.l2j.gameserver.model.actor.L2Npc;
3216 import net.sf.l2j.gameserver.model.actor.instance.L2FestivalMonsterInstance;
3217@@ -3502,7 +3502,7 @@
3218
3219 private static void addReputationPointsForPartyMemberClan(String partyMemberName)
3220 {
3221- L2PcInstance player = L2World.getInstance().getPlayer(partyMemberName);
3222+ L2PcInstance player = World.getInstance().getPlayer(partyMemberName);
3223 if (player != null)
3224 {
3225 if (player.getClan() != null)
3226@@ -3603,7 +3603,7 @@
3227 saveFestivalData(updateSettings);
3228
3229 // Remove any unused blood offerings from online players.
3230- for (L2PcInstance player : L2World.getInstance().getPlayers())
3231+ for (L2PcInstance player : World.getInstance().getPlayers())
3232 {
3233 ItemInstance bloodOfferings = player.getInventory().getItemByItemId(FESTIVAL_OFFERING_ID);
3234 if (bloodOfferings != null)
3235@@ -3784,7 +3784,7 @@
3236 if (festivalParty == null)// leader has left
3237 for (int partyMemberObjId : getParticipants(oracle, festivalId))
3238 {
3239- L2PcInstance partyMember = L2World.getInstance().getPlayer(partyMemberObjId);
3240+ L2PcInstance partyMember = World.getInstance().getPlayer(partyMemberObjId);
3241 if (partyMember == null)
3242 continue;
3243
3244@@ -4395,7 +4395,7 @@
3245 {
3246 for (int participantObjId : _participants)
3247 {
3248- L2PcInstance participant = L2World.getInstance().getPlayer(participantObjId);
3249+ L2PcInstance participant = World.getInstance().getPlayer(participantObjId);
3250 if (participant == null)
3251 continue;
3252
3253@@ -4615,7 +4615,7 @@
3254 {
3255 for (int participantObjId : _participants)
3256 {
3257- L2PcInstance participant = L2World.getInstance().getPlayer(participantObjId);
3258+ L2PcInstance participant = World.getInstance().getPlayer(participantObjId);
3259 if (participant == null)
3260 continue;
3261
3262Index: GameServer/java/net/sf/l2j/gameserver/instancemanager/CastleManorManager.java
3263===================================================================
3264--- GameServer/java/net/sf/l2j/gameserver/instancemanager/CastleManorManager.java (révision 553)
3265+++ GameServer/java/net/sf/l2j/gameserver/instancemanager/CastleManorManager.java (révision 568)
3266@@ -32,7 +32,7 @@
3267 import net.sf.l2j.gameserver.datatables.ClanTable;
3268 import net.sf.l2j.gameserver.model.L2Clan;
3269 import net.sf.l2j.gameserver.model.L2Manor;
3270-import net.sf.l2j.gameserver.model.L2World;
3271+import net.sf.l2j.gameserver.model.World;
3272 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
3273 import net.sf.l2j.gameserver.model.entity.Castle;
3274 import net.sf.l2j.gameserver.model.itemcontainer.ClanWarehouse;
3275@@ -454,7 +454,7 @@
3276
3277 // Sending notification to a clan leader
3278 L2PcInstance clanLeader = null;
3279- clanLeader = L2World.getInstance().getPlayer(clan.getLeader().getName());
3280+ clanLeader = World.getInstance().getPlayer(clan.getLeader().getName());
3281 if (clanLeader != null)
3282 clanLeader.sendPacket(SystemMessageId.THE_MANOR_INFORMATION_HAS_BEEN_UPDATED);
3283
3284Index: GameServer/java/net/sf/l2j/gameserver/model/item/instance/ItemInstance.java
3285===================================================================
3286--- GameServer/java/net/sf/l2j/gameserver/model/item/instance/ItemInstance.java (révision 553)
3287+++ GameServer/java/net/sf/l2j/gameserver/model/item/instance/ItemInstance.java (révision 568)
3288@@ -35,8 +35,8 @@
3289 import net.sf.l2j.gameserver.instancemanager.MercTicketManager;
3290 import net.sf.l2j.gameserver.model.L2Augmentation;
3291 import net.sf.l2j.gameserver.model.L2Object;
3292-import net.sf.l2j.gameserver.model.L2World;
3293-import net.sf.l2j.gameserver.model.L2WorldRegion;
3294+import net.sf.l2j.gameserver.model.World;
3295+import net.sf.l2j.gameserver.model.WorldRegion;
3296 import net.sf.l2j.gameserver.model.Location;
3297 import net.sf.l2j.gameserver.model.ShotType;
3298 import net.sf.l2j.gameserver.model.actor.L2Character;
3299@@ -966,7 +966,7 @@
3300 // Set the x,y,z position of the ItemInstance dropped and update its _worldregion
3301 _itm.setIsVisible(true);
3302 _itm.getPosition().set(_x, _y, _z);
3303- _itm.setRegion(L2World.getInstance().getRegion(getPosition()));
3304+ _itm.setRegion(World.getInstance().getRegion(getPosition()));
3305 }
3306
3307 _itm.getRegion().addVisibleObject(_itm);
3308@@ -973,7 +973,7 @@
3309 _itm.setDropperObjectId(_dropper != null ? _dropper.getObjectId() : 0); // Set the dropper Id for the knownlist packets in sendInfo
3310
3311 // Add the ItemInstance dropped in the world as a visible object
3312- L2World.getInstance().addVisibleObject(_itm, _itm.getRegion());
3313+ World.getInstance().addVisibleObject(_itm, _itm.getRegion());
3314
3315 ItemsOnGroundTaskManager.getInstance().add(_itm, _dropper);
3316
3317@@ -992,7 +992,7 @@
3318 {
3319 assert getRegion() != null;
3320
3321- L2WorldRegion oldregion = getRegion();
3322+ WorldRegion oldregion = getRegion();
3323
3324 // Create a server->client GetItem packet to pick up the ItemInstance
3325 player.broadcastPacket(new GetItem(this, player.getObjectId()));
3326@@ -1021,7 +1021,7 @@
3327 }
3328
3329 // Remove the ItemInstance from the world (out of synchro, to avoid deadlocks)
3330- L2World.getInstance().removeVisibleObject(this, oldregion);
3331+ World.getInstance().removeVisibleObject(this, oldregion);
3332 }
3333
3334 /**
3335Index: GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java
3336===================================================================
3337--- GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java (révision 553)
3338+++ GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2SiegeGuardInstance.java (révision 568)
3339@@ -131,17 +131,8 @@
3340 }
3341
3342 @Override
3343- public boolean returnHome()
3344+ public int getDriftRange()
3345 {
3346- getAggroList().clear();
3347-
3348- if (getMoveSpeed() > 0 && hasAI() && getSpawn() != null && !isInsideRadius(getSpawn().getLocX(), getSpawn().getLocY(), 20, false))
3349- {
3350- setIsReturningToSpawnPoint(true);
3351- setWalking();
3352- getAI().setIntention(CtrlIntention.MOVE_TO, getSpawn().getLoc());
3353- return true;
3354- }
3355- return false;
3356+ return 20;
3357 }
3358 }
3359\ No newline at end of file
3360Index: GameServer/java/net/sf/l2j/gameserver/model/actor/L2Playable.java
3361===================================================================
3362--- GameServer/java/net/sf/l2j/gameserver/model/actor/L2Playable.java (révision 553)
3363+++ GameServer/java/net/sf/l2j/gameserver/model/actor/L2Playable.java (révision 568)
3364@@ -19,7 +19,7 @@
3365 import net.sf.l2j.gameserver.model.L2Effect;
3366 import net.sf.l2j.gameserver.model.L2Object;
3367 import net.sf.l2j.gameserver.model.L2Skill;
3368-import net.sf.l2j.gameserver.model.L2WorldRegion;
3369+import net.sf.l2j.gameserver.model.WorldRegion;
3370 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
3371 import net.sf.l2j.gameserver.model.actor.stat.PlayableStat;
3372 import net.sf.l2j.gameserver.model.actor.status.PlayableStatus;
3373@@ -141,7 +141,7 @@
3374 // Notify L2Character AI
3375 getAI().notifyEvent(CtrlEvent.EVT_DEAD);
3376
3377- final L2WorldRegion region = getRegion();
3378+ final WorldRegion region = getRegion();
3379 if (region != null)
3380 region.onDeath(this);
3381
3382@@ -181,7 +181,7 @@
3383 // Start broadcast status
3384 broadcastPacket(new Revive(this));
3385
3386- final L2WorldRegion region = getRegion();
3387+ final WorldRegion region = getRegion();
3388 if (region != null)
3389 region.onRevive(this);
3390 }
3391Index: GameServer/java/net/sf/l2j/gameserver/model/entity/Hero.java
3392===================================================================
3393--- GameServer/java/net/sf/l2j/gameserver/model/entity/Hero.java (révision 553)
3394+++ GameServer/java/net/sf/l2j/gameserver/model/entity/Hero.java (révision 568)
3395@@ -41,7 +41,7 @@
3396 import net.sf.l2j.gameserver.datatables.NpcTable;
3397 import net.sf.l2j.gameserver.instancemanager.CastleManager;
3398 import net.sf.l2j.gameserver.model.L2Clan;
3399-import net.sf.l2j.gameserver.model.L2World;
3400+import net.sf.l2j.gameserver.model.World;
3401 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
3402 import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
3403 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
3404@@ -595,7 +595,7 @@
3405 {
3406 String name = hero.getString(Olympiad.CHAR_NAME);
3407
3408- L2PcInstance player = L2World.getInstance().getPlayer(name);
3409+ L2PcInstance player = World.getInstance().getPlayer(name);
3410 if (player == null)
3411 continue;
3412
3413Index: GameServer/java/net/sf/l2j/gameserver/model/World.java
3414===================================================================
3415--- GameServer/java/net/sf/l2j/gameserver/model/World.java (nonexistent)
3416+++ GameServer/java/net/sf/l2j/gameserver/model/World.java (révision 568)
3417@@ -0,0 +1,404 @@
3418+/*
3419+ * This program is free software: you can redistribute it and/or modify it under
3420+ * the terms of the GNU General Public License as published by the Free Software
3421+ * Foundation, either version 3 of the License, or (at your option) any later
3422+ * version.
3423+ *
3424+ * This program is distributed in the hope that it will be useful, but WITHOUT
3425+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
3426+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
3427+ * details.
3428+ *
3429+ * You should have received a copy of the GNU General Public License along with
3430+ * this program. If not, see <http://www.gnu.org/licenses/>.
3431+ */
3432+package net.sf.l2j.gameserver.model;
3433+
3434+import java.util.ArrayList;
3435+import java.util.Collection;
3436+import java.util.List;
3437+import java.util.Map;
3438+import java.util.concurrent.ConcurrentHashMap;
3439+import java.util.logging.Logger;
3440+
3441+import net.sf.l2j.gameserver.datatables.CharNameTable;
3442+import net.sf.l2j.gameserver.datatables.SpawnTable;
3443+import net.sf.l2j.gameserver.model.actor.L2Npc;
3444+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
3445+import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
3446+
3447+public final class World
3448+{
3449+ private static Logger _log = Logger.getLogger(World.class.getName());
3450+
3451+ // Geodata min/max tiles
3452+ public static final int TILE_X_MIN = 16;
3453+ public static final int TILE_X_MAX = 26;
3454+ public static final int TILE_Y_MIN = 10;
3455+ public static final int TILE_Y_MAX = 25;
3456+
3457+ // Map dimensions
3458+ public static final int TILE_SIZE = 32768;
3459+ public static final int WORLD_X_MIN = (TILE_X_MIN - 20) * TILE_SIZE;
3460+ public static final int WORLD_X_MAX = (TILE_X_MAX - 19) * TILE_SIZE;
3461+ public static final int WORLD_Y_MIN = (TILE_Y_MIN - 18) * TILE_SIZE;
3462+ public static final int WORLD_Y_MAX = (TILE_Y_MAX - 17) * TILE_SIZE;
3463+
3464+ // Regions and offsets
3465+ private static final int REGION_SIZE = 4096;
3466+ private static final int REGIONS_X = (WORLD_X_MAX - WORLD_X_MIN) / REGION_SIZE;
3467+ private static final int REGIONS_Y = (WORLD_Y_MAX - WORLD_Y_MIN) / REGION_SIZE;
3468+ private static final int REGION_X_OFFSET = Math.abs(WORLD_X_MIN / REGION_SIZE);
3469+ private static final int REGION_Y_OFFSET = Math.abs(WORLD_Y_MIN / REGION_SIZE);
3470+
3471+ private final Map<Integer, L2Object> _objects = new ConcurrentHashMap<>();
3472+ private final Map<Integer, L2PetInstance> _pets = new ConcurrentHashMap<>();
3473+ private final Map<Integer, L2PcInstance> _players = new ConcurrentHashMap<>();
3474+
3475+ private final WorldRegion[][] _worldRegions = new WorldRegion[REGIONS_X + 1][REGIONS_Y + 1];
3476+
3477+ protected World()
3478+ {
3479+ for (int i = 0; i <= REGIONS_X; i++)
3480+ {
3481+ for (int j = 0; j <= REGIONS_Y; j++)
3482+ _worldRegions[i][j] = new WorldRegion(i, j);
3483+ }
3484+
3485+ for (int x = 0; x <= REGIONS_X; x++)
3486+ {
3487+ for (int y = 0; y <= REGIONS_Y; y++)
3488+ {
3489+ for (int a = -1; a <= 1; a++)
3490+ {
3491+ for (int b = -1; b <= 1; b++)
3492+ {
3493+ if (validRegion(x + a, y + b))
3494+ _worldRegions[x + a][y + b].addSurroundingRegion(_worldRegions[x][y]);
3495+ }
3496+ }
3497+ }
3498+ }
3499+ _log.info("L2World: WorldRegion grid (" + REGIONS_X + " by " + REGIONS_Y + ") is now setted up.");
3500+ }
3501+
3502+ public void addObject(L2Object object)
3503+ {
3504+ _objects.putIfAbsent(object.getObjectId(), object);
3505+ }
3506+
3507+ public void removeObject(L2Object object)
3508+ {
3509+ _objects.remove(object.getObjectId());
3510+ }
3511+
3512+ public Collection<L2Object> getObjects()
3513+ {
3514+ return _objects.values();
3515+ }
3516+
3517+ public L2Object getObject(int objectId)
3518+ {
3519+ return _objects.get(objectId);
3520+ }
3521+
3522+ public void addPlayer(L2PcInstance cha)
3523+ {
3524+ _players.putIfAbsent(cha.getObjectId(), cha);
3525+ }
3526+
3527+ public void removePlayer(L2PcInstance cha)
3528+ {
3529+ _players.remove(cha.getObjectId());
3530+ }
3531+
3532+ public Collection<L2PcInstance> getPlayers()
3533+ {
3534+ return _players.values();
3535+ }
3536+
3537+ public L2PcInstance getPlayer(String name)
3538+ {
3539+ return _players.get(CharNameTable.getInstance().getPlayerObjectId(name));
3540+ }
3541+
3542+ public L2PcInstance getPlayer(int objectId)
3543+ {
3544+ return _players.get(objectId);
3545+ }
3546+
3547+ public L2PetInstance addPet(int ownerId, L2PetInstance pet)
3548+ {
3549+ return _pets.putIfAbsent(ownerId, pet);
3550+ }
3551+
3552+ public void removePet(int ownerId)
3553+ {
3554+ _pets.remove(ownerId);
3555+ }
3556+
3557+ public L2PetInstance getPet(int ownerId)
3558+ {
3559+ return _pets.get(ownerId);
3560+ }
3561+
3562+ /**
3563+ * Add a L2Object in the world.<BR>
3564+ * <BR>
3565+ * <B><U> Concept</U> :</B><BR>
3566+ * <BR>
3567+ * L2Object (including L2PcInstance) are identified in <B>_visibleObjects</B> of his current L2WorldRegion and in <B>_knownObjects</B> of other surrounding L2Characters <BR>
3568+ * L2PcInstance are identified in <B>_allPlayers</B> of L2World, in <B>_allPlayers</B> of his current L2WorldRegion and in <B>_knownPlayer</B> of other surrounding L2Characters <BR>
3569+ * <BR>
3570+ * <B><U> Actions</U> :</B><BR>
3571+ * <BR>
3572+ * <li>Add the L2Object object in _allPlayers* of L2World</li> <li>Add the L2Object object in _gmList** of GmListTable</li> <li>Add object in _knownObjects and _knownPlayer* of all surrounding L2WorldRegion L2Characters</li><BR>
3573+ * <li>If object is a L2Character, add all surrounding L2Object in its _knownObjects and all surrounding L2PcInstance in its _knownPlayer</li><BR>
3574+ * <I>* only if object is a L2PcInstance</I><BR>
3575+ * <I>** only if object is a GM L2PcInstance</I><BR>
3576+ * <BR>
3577+ * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T ADD the object in _visibleObjects and _allPlayers* of L2WorldRegion (need synchronisation)</B></FONT><BR>
3578+ * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T ADD the object to _allObjects and _allPlayers* of L2World (need synchronisation)</B></FONT><BR>
3579+ * <BR>
3580+ * <B><U> Example of use </U> :</B><BR>
3581+ * <BR>
3582+ * <li>Drop an Item</li> <li>Spawn a L2Character</li> <li>Apply Death Penalty of a L2PcInstance</li><BR>
3583+ * <BR>
3584+ * @param object L2object to add in the world
3585+ * @param newRegion L2WorldRegion in wich the object will be add (not used)
3586+ */
3587+ public void addVisibleObject(L2Object object, WorldRegion newRegion)
3588+ {
3589+ if (object instanceof L2PcInstance)
3590+ {
3591+ L2PcInstance player = (L2PcInstance) object;
3592+
3593+ if (!player.isTeleporting())
3594+ {
3595+ L2PcInstance tmp = _players.get(player.getObjectId());
3596+ if (tmp != null)
3597+ {
3598+ _log.warning("Duplicate character!? Closing both characters (" + player.getName() + ")");
3599+ player.logout();
3600+ tmp.logout();
3601+ return;
3602+ }
3603+ _players.putIfAbsent(player.getObjectId(), player);
3604+ }
3605+ }
3606+
3607+ if (!newRegion.isActive())
3608+ return;
3609+
3610+ final boolean objectHasKnownlist = (object.getKnownList() != null);
3611+
3612+ // tell the player about the surroundings
3613+ // Go through the visible objects contained in the circular area
3614+ for (L2Object visible : getVisibleObjects(object, 2000))
3615+ {
3616+ // Add the object in L2ObjectHashSet(L2Object) _knownObjects of the visible L2Character according to conditions :
3617+ // - L2Character is visible
3618+ // - object is not already known
3619+ // - object is in the watch distance
3620+ // If L2Object is a L2PcInstance, add L2Object in L2ObjectHashSet(L2PcInstance) _knownPlayer of the visible L2Character
3621+ if (visible.getKnownList() != null)
3622+ visible.getKnownList().addKnownObject(object);
3623+
3624+ // Add the visible L2Object in L2ObjectHashSet(L2Object) _knownObjects of the object according to conditions
3625+ // If visible L2Object is a L2PcInstance, add visible L2Object in L2ObjectHashSet(L2PcInstance) _knownPlayer of the object
3626+ if (objectHasKnownlist)
3627+ object.getKnownList().addKnownObject(visible);
3628+ }
3629+ }
3630+
3631+ /**
3632+ * Remove a L2Object from the world.<BR>
3633+ * <BR>
3634+ * <B><U> Concept</U> :</B><BR>
3635+ * <BR>
3636+ * L2Object (including L2PcInstance) are identified in <B>_visibleObjects</B> of his current L2WorldRegion and in <B>_knownObjects</B> of other surrounding L2Characters <BR>
3637+ * L2PcInstance are identified in <B>_allPlayers</B> of L2World, in <B>_allPlayers</B> of his current L2WorldRegion and in <B>_knownPlayer</B> of other surrounding L2Characters <BR>
3638+ * <BR>
3639+ * <B><U> Actions</U> :</B><BR>
3640+ * <BR>
3641+ * <li>Remove the L2Object object from _allPlayers* of L2World</li> <li>Remove the L2Object object from _visibleObjects and _allPlayers* of L2WorldRegion</li> <li>Remove the L2Object object from _gmList** of GmListTable</li> <li>Remove object from _knownObjects and _knownPlayer* of all
3642+ * surrounding L2WorldRegion L2Characters</li><BR>
3643+ * <li>If object is a L2Character, remove all L2Object from its _knownObjects and all L2PcInstance from its _knownPlayer</li><BR>
3644+ * <BR>
3645+ * <FONT COLOR=#FF0000><B> <U>Caution</U> : This method DOESN'T REMOVE the object from _allObjects of L2World</B></FONT><BR>
3646+ * <BR>
3647+ * <I>* only if object is a L2PcInstance</I><BR>
3648+ * <I>** only if object is a GM L2PcInstance</I><BR>
3649+ * <BR>
3650+ * <B><U> Example of use </U> :</B><BR>
3651+ * <BR>
3652+ * <li>Pickup an Item</li> <li>Decay a L2Character</li><BR>
3653+ * <BR>
3654+ * @param object L2object to remove from the world
3655+ * @param oldRegion L2WorldRegion in wich the object was before removing
3656+ */
3657+ public void removeVisibleObject(L2Object object, WorldRegion oldRegion)
3658+ {
3659+ if (object == null || oldRegion == null)
3660+ return;
3661+
3662+ // Remove the object from the L2ObjectHashSet(L2Object) _visibleObjects of L2WorldRegion
3663+ // If object is a L2PcInstance, remove it from the L2ObjectHashSet(L2PcInstance) _allPlayers of this L2WorldRegion
3664+ oldRegion.removeVisibleObject(object);
3665+
3666+ final boolean objectHasKnownlist = (object.getKnownList() != null);
3667+
3668+ // Go through all surrounding L2WorldRegion L2Characters
3669+ for (WorldRegion reg : oldRegion.getSurroundingRegions())
3670+ {
3671+ for (L2Object obj : reg.getObjects())
3672+ {
3673+ if (obj.getKnownList() != null)
3674+ obj.getKnownList().removeKnownObject(object);
3675+
3676+ if (objectHasKnownlist)
3677+ object.getKnownList().removeKnownObject(obj);
3678+ }
3679+ }
3680+
3681+ // If object is a L2Character :
3682+ // Remove all L2Object from L2ObjectHashSet(L2Object) containing all L2Object detected by the L2Character
3683+ // Remove all L2PcInstance from L2ObjectHashSet(L2PcInstance) containing all player ingame detected by the L2Character
3684+ if (objectHasKnownlist)
3685+ object.getKnownList().removeAllKnownObjects();
3686+
3687+ // If selected L2Object is a L2PcIntance, remove it from L2ObjectHashSet(L2PcInstance) _allPlayers of L2World
3688+ if (object instanceof L2PcInstance)
3689+ {
3690+ if (!((L2PcInstance) object).isTeleporting())
3691+ removePlayer((L2PcInstance) object);
3692+ }
3693+ }
3694+
3695+ /**
3696+ * <B><U> Concept</U> :</B><BR>
3697+ * <BR>
3698+ * All visible object are identified in <B>_visibleObjects</B> of their current L2WorldRegion <BR>
3699+ * All surrounding L2WorldRegion are identified in <B>_surroundingRegions</B> of the selected L2WorldRegion in order to scan a large area around a L2Object
3700+ * @param object L2object that determine the center of the circular area
3701+ * @param radius Radius of the circular area
3702+ * @return all visible objects of the L2WorldRegions in the circular area (radius) centered on the object.
3703+ */
3704+ public static List<L2Object> getVisibleObjects(L2Object object, int radius)
3705+ {
3706+ if (object == null || !object.isVisible())
3707+ return new ArrayList<>();
3708+
3709+ int x = object.getX();
3710+ int y = object.getY();
3711+ int sqRadius = radius * radius;
3712+
3713+ // Create an FastList in order to contain all visible L2Object
3714+ List<L2Object> result = new ArrayList<>();
3715+
3716+ // Go through the FastList of region
3717+ for (WorldRegion regi : object.getRegion().getSurroundingRegions())
3718+ {
3719+ // Go through visible objects of the selected region
3720+ for (L2Object _object : regi.getObjects())
3721+ {
3722+ if (_object == null || _object.equals(object))
3723+ continue; // skip our own character
3724+
3725+ int x1 = _object.getX();
3726+ int y1 = _object.getY();
3727+
3728+ double dx = x1 - x;
3729+ double dy = y1 - y;
3730+
3731+ // If the visible object is inside the circular area add the object to the FastList result
3732+ if (dx * dx + dy * dy < sqRadius)
3733+ result.add(_object);
3734+ }
3735+ }
3736+
3737+ return result;
3738+ }
3739+
3740+ public static int getRegionX(int regionX)
3741+ {
3742+ return (regionX - REGION_X_OFFSET) * REGION_SIZE;
3743+ }
3744+
3745+ public static int getRegionY(int regionY)
3746+ {
3747+ return (regionY - REGION_Y_OFFSET) * REGION_SIZE;
3748+ }
3749+
3750+ /**
3751+ * @param point position of the object.
3752+ * @return the current L2WorldRegion of the object according to its position (x,y).
3753+ */
3754+ public WorldRegion getRegion(Location point)
3755+ {
3756+ return getRegion(point.getX(), point.getY());
3757+ }
3758+
3759+ public WorldRegion getRegion(int x, int y)
3760+ {
3761+ return _worldRegions[(x - WORLD_X_MIN) / REGION_SIZE][(y - WORLD_Y_MIN) / REGION_SIZE];
3762+ }
3763+
3764+ /**
3765+ * @return the whole 2d array containing the world regions used by ZoneData.java to setup zones inside the world regions
3766+ */
3767+ public WorldRegion[][] getWorldRegions()
3768+ {
3769+ return _worldRegions;
3770+ }
3771+
3772+ /**
3773+ * Check if the current L2WorldRegions of the object is valid according to its position (x,y).
3774+ * @param x X position of the object
3775+ * @param y Y position of the object
3776+ * @return True if the L2WorldRegion is valid
3777+ */
3778+ private static boolean validRegion(int x, int y)
3779+ {
3780+ return (x >= 0 && x <= REGIONS_X && y >= 0 && y <= REGIONS_Y);
3781+ }
3782+
3783+ /**
3784+ * Deleted all spawns in the world.
3785+ */
3786+ public void deleteVisibleNpcSpawns()
3787+ {
3788+ _log.info("Deleting all visible NPCs.");
3789+ for (int i = 0; i <= REGIONS_X; i++)
3790+ {
3791+ for (int j = 0; j <= REGIONS_Y; j++)
3792+ {
3793+ for (L2Object obj : _worldRegions[i][j].getObjects())
3794+ {
3795+ if (obj instanceof L2Npc)
3796+ {
3797+ ((L2Npc) obj).deleteMe();
3798+
3799+ final L2Spawn spawn = ((L2Npc) obj).getSpawn();
3800+ if (spawn != null)
3801+ {
3802+ spawn.setRespawnState(false);
3803+ SpawnTable.getInstance().deleteSpawn(spawn, false);
3804+ }
3805+ }
3806+ }
3807+ }
3808+ }
3809+ _log.info("All visibles NPCs are now deleted.");
3810+ }
3811+
3812+ public static World getInstance()
3813+ {
3814+ return SingletonHolder._instance;
3815+ }
3816+
3817+ private static class SingletonHolder
3818+ {
3819+ protected static final World _instance = new World();
3820+ }
3821+}
3822\ No newline at end of file
3823Index: GameServer/java/net/sf/l2j/gameserver/instancemanager/BoatManager.java
3824===================================================================
3825--- GameServer/java/net/sf/l2j/gameserver/instancemanager/BoatManager.java (révision 553)
3826+++ GameServer/java/net/sf/l2j/gameserver/instancemanager/BoatManager.java (révision 568)
3827@@ -18,7 +18,7 @@
3828 import java.util.Map;
3829
3830 import net.sf.l2j.gameserver.idfactory.IdFactory;
3831-import net.sf.l2j.gameserver.model.L2World;
3832+import net.sf.l2j.gameserver.model.World;
3833 import net.sf.l2j.gameserver.model.VehiclePathPoint;
3834 import net.sf.l2j.gameserver.model.actor.L2Vehicle;
3835 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
3836@@ -132,7 +132,7 @@
3837 */
3838 public void broadcastPacket(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket packet)
3839 {
3840- for (L2PcInstance player : L2World.getInstance().getPlayers())
3841+ for (L2PcInstance player : World.getInstance().getPlayers())
3842 {
3843 double dx = (double) player.getX() - point1.x;
3844 double dy = (double) player.getY() - point1.y;
3845@@ -158,7 +158,7 @@
3846 */
3847 public void broadcastPackets(VehiclePathPoint point1, VehiclePathPoint point2, L2GameServerPacket... packets)
3848 {
3849- for (L2PcInstance player : L2World.getInstance().getPlayers())
3850+ for (L2PcInstance player : World.getInstance().getPlayers())
3851 {
3852 double dx = (double) player.getX() - point1.x;
3853 double dy = (double) player.getY() - point1.y;
3854Index: GameServer/java/net/sf/l2j/gameserver/instancemanager/MercTicketManager.java
3855===================================================================
3856--- GameServer/java/net/sf/l2j/gameserver/instancemanager/MercTicketManager.java (révision 553)
3857+++ GameServer/java/net/sf/l2j/gameserver/instancemanager/MercTicketManager.java (révision 568)
3858@@ -26,7 +26,7 @@
3859 import net.sf.l2j.L2DatabaseFactory;
3860 import net.sf.l2j.gameserver.datatables.NpcTable;
3861 import net.sf.l2j.gameserver.idfactory.IdFactory;
3862-import net.sf.l2j.gameserver.model.L2World;
3863+import net.sf.l2j.gameserver.model.World;
3864 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
3865 import net.sf.l2j.gameserver.model.actor.instance.L2SiegeGuardInstance;
3866 import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
3867@@ -712,7 +712,7 @@
3868 dropticket.setLocation(ItemInstance.ItemLocation.INVENTORY);
3869 dropticket.setDestroyProtected(true);
3870 dropticket.dropMe(null, x, y, z);
3871- L2World.getInstance().addObject(dropticket);
3872+ World.getInstance().addObject(dropticket);
3873 _droppedTickets.add(dropticket);
3874 }
3875 break;
3876@@ -842,7 +842,7 @@
3877 dropticket.setLocation(ItemInstance.ItemLocation.INVENTORY);
3878 dropticket.setDestroyProtected(true);
3879 dropticket.dropMe(activeChar, x, y, z);
3880- L2World.getInstance().addObject(dropticket); // add to the world
3881+ World.getInstance().addObject(dropticket); // add to the world
3882 // and keep track of this ticket in the list
3883 _droppedTickets.add(dropticket);
3884
3885@@ -880,7 +880,7 @@
3886 if (item != null && getTicketCastleId(item.getItemId()) == castleId)
3887 {
3888 item.decayMe();
3889- L2World.getInstance().removeObject(item);
3890+ World.getInstance().removeObject(item);
3891 it.remove();
3892 }
3893 }
3894Index: GameServer/java/net/sf/l2j/gameserver/geoengine/geodata/GeoStructure.java
3895===================================================================
3896--- GameServer/java/net/sf/l2j/gameserver/geoengine/geodata/GeoStructure.java (révision 553)
3897+++ GameServer/java/net/sf/l2j/gameserver/geoengine/geodata/GeoStructure.java (révision 568)
3898@@ -14,7 +14,7 @@
3899 */
3900 package net.sf.l2j.gameserver.geoengine.geodata;
3901
3902-import net.sf.l2j.gameserver.model.L2World;
3903+import net.sf.l2j.gameserver.model.World;
3904
3905 /**
3906 * @author Hasha
3907@@ -62,8 +62,8 @@
3908 public static final int REGION_CELLS_Y = REGION_BLOCKS_Y * BLOCK_CELLS_Y;
3909
3910 // global geodata
3911- public static final int GEO_REGIONS_X = (L2World.TILE_X_MAX - L2World.TILE_X_MIN + 1);
3912- public static final int GEO_REGIONS_Y = (L2World.TILE_Y_MAX - L2World.TILE_Y_MIN + 1);
3913+ public static final int GEO_REGIONS_X = (World.TILE_X_MAX - World.TILE_X_MIN + 1);
3914+ public static final int GEO_REGIONS_Y = (World.TILE_Y_MAX - World.TILE_Y_MIN + 1);
3915
3916 public static final int GEO_BLOCKS_X = GEO_REGIONS_X * REGION_BLOCKS_X;
3917 public static final int GEO_BLOCKS_Y = GEO_REGIONS_Y * REGION_BLOCKS_Y;
3918Index: GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2WeddingManagerInstance.java
3919===================================================================
3920--- GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2WeddingManagerInstance.java (révision 553)
3921+++ GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2WeddingManagerInstance.java (révision 568)
3922@@ -23,11 +23,9 @@
3923 import net.sf.l2j.gameserver.datatables.SkillTable.FrequentSkill;
3924 import net.sf.l2j.gameserver.instancemanager.CastleManager;
3925 import net.sf.l2j.gameserver.instancemanager.CoupleManager;
3926-import net.sf.l2j.gameserver.model.L2Skill;
3927-import net.sf.l2j.gameserver.model.L2World;
3928+import net.sf.l2j.gameserver.model.World;
3929 import net.sf.l2j.gameserver.model.actor.L2Npc;
3930 import net.sf.l2j.gameserver.model.actor.template.NpcTemplate;
3931-import net.sf.l2j.gameserver.model.entity.Couple;
3932 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
3933 import net.sf.l2j.gameserver.model.itemcontainer.Inventory;
3934 import net.sf.l2j.gameserver.network.serverpackets.ActionFailed;
3935@@ -37,9 +35,6 @@
3936 import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
3937 import net.sf.l2j.gameserver.util.Broadcast;
3938
3939-/**
3940- * @author evill33t & squeezed, rework Tryskell
3941- */
3942 public class L2WeddingManagerInstance extends L2NpcInstance
3943 {
3944 public L2WeddingManagerInstance(int objectId, NpcTemplate template)
3945@@ -72,7 +67,7 @@
3946 else
3947 {
3948 // Married people got access to another menu
3949- if (player.isMarried())
3950+ if (player.getCoupleId() > 0)
3951 sendHtmlMessage(player, "data/html/mods/Wedding_start2.htm");
3952 // "Under marriage acceptance" people go to this one
3953 else if (player.isUnderMarryRequest())
3954@@ -95,8 +90,8 @@
3955
3956 if (st.hasMoreTokens())
3957 {
3958- final L2PcInstance ptarget = L2World.getInstance().getPlayer(st.nextToken());
3959- if (ptarget == null)
3960+ final L2PcInstance partner = World.getInstance().getPlayer(st.nextToken());
3961+ if (partner == null)
3962 {
3963 sendHtmlMessage(player, "data/html/mods/Wedding_notfound.htm");
3964 return;
3965@@ -103,35 +98,33 @@
3966 }
3967
3968 // check conditions
3969- if (!weddingConditions(player, ptarget))
3970+ if (!weddingConditions(player, partner))
3971 return;
3972
3973 // block the wedding manager until an answer is given.
3974 player.setUnderMarryRequest(true);
3975- ptarget.setUnderMarryRequest(true);
3976+ partner.setUnderMarryRequest(true);
3977
3978 // memorize the requesterId for future use, and send a popup to the target
3979- ptarget.setRequesterId(player.getObjectId());
3980- ptarget.sendPacket(new ConfirmDlg(1983).addString(player.getName() + " asked you to marry. Do you want to start a new relationship ?"));
3981+ partner.setRequesterId(player.getObjectId());
3982+ partner.sendPacket(new ConfirmDlg(1983).addString(player.getName() + " asked you to marry. Do you want to start a new relationship ?"));
3983 }
3984 else
3985 sendHtmlMessage(player, "data/html/mods/Wedding_notfound.htm");
3986 }
3987 else if (command.startsWith("Divorce"))
3988- {
3989- player.sendMessage("You are now divorced.");
3990-
3991- // Find the partner using the couple information
3992- final L2PcInstance partner = L2World.getInstance().getPlayer(Couple.getPartnerId(player.getObjectId()));
3993- if (partner != null)
3994- partner.sendMessage("Your beloved has decided to divorce.");
3995-
3996 CoupleManager.getInstance().deleteCouple(player.getCoupleId());
3997- }
3998 else if (command.startsWith("GoToLove"))
3999 {
4000- // Find the partner using the couple information
4001- final L2PcInstance partner = L2World.getInstance().getPlayer(Couple.getPartnerId(player.getObjectId()));
4002+ // Find the partner using the couple id.
4003+ final int partnerId = CoupleManager.getInstance().getPartnerId(player.getCoupleId(), player.getObjectId());
4004+ if (partnerId == 0)
4005+ {
4006+ player.sendMessage("Your partner can't be found.");
4007+ return;
4008+ }
4009+
4010+ final L2PcInstance partner = World.getInstance().getPlayer(partnerId);
4011 if (partner == null)
4012 {
4013 player.sendMessage("Your partner is not online.");
4014@@ -175,48 +168,47 @@
4015 return true;
4016 }
4017
4018- private boolean weddingConditions(L2PcInstance player, L2PcInstance ptarget)
4019+ private boolean weddingConditions(L2PcInstance requester, L2PcInstance partner)
4020 {
4021 // Check if player target himself
4022- if (ptarget.getObjectId() == player.getObjectId())
4023+ if (partner.getObjectId() == requester.getObjectId())
4024 {
4025- sendHtmlMessage(player, "data/html/mods/Wedding_error_wrongtarget.htm");
4026+ sendHtmlMessage(requester, "data/html/mods/Wedding_error_wrongtarget.htm");
4027 return false;
4028 }
4029
4030 // Sex check
4031- if (ptarget.getAppearance().getSex() == player.getAppearance().getSex() && !Config.WEDDING_SAMESEX)
4032+ if (!Config.WEDDING_SAMESEX && partner.getAppearance().getSex() == requester.getAppearance().getSex())
4033 {
4034- sendHtmlMessage(player, "data/html/mods/Wedding_error_sex.htm");
4035+ sendHtmlMessage(requester, "data/html/mods/Wedding_error_sex.htm");
4036 return false;
4037 }
4038
4039 // Check if player has the target on friendlist
4040- if (!player.getFriendList().contains(ptarget.getObjectId()))
4041+ if (!requester.getFriendList().contains(partner.getObjectId()))
4042 {
4043- sendHtmlMessage(player, "data/html/mods/Wedding_error_friendlist.htm");
4044+ sendHtmlMessage(requester, "data/html/mods/Wedding_error_friendlist.htm");
4045 return false;
4046 }
4047
4048 // Target mustn't be already married
4049- if (ptarget.isMarried())
4050+ if (partner.getCoupleId() > 0)
4051 {
4052- sendHtmlMessage(player, "data/html/mods/Wedding_error_alreadymarried.htm");
4053+ sendHtmlMessage(requester, "data/html/mods/Wedding_error_alreadymarried.htm");
4054 return false;
4055 }
4056
4057 // Check for Formal Wear
4058- if (Config.WEDDING_FORMALWEAR)
4059- if (!wearsFormalWear(player, ptarget))
4060- {
4061- sendHtmlMessage(player, "data/html/mods/Wedding_error_noformal.htm");
4062- return false;
4063- }
4064+ if (Config.WEDDING_FORMALWEAR && !wearsFormalWear(requester, partner))
4065+ {
4066+ sendHtmlMessage(requester, "data/html/mods/Wedding_error_noformal.htm");
4067+ return false;
4068+ }
4069
4070 // Check and reduce wedding price
4071- if (player.getAdena() < Config.WEDDING_PRICE || ptarget.getAdena() < Config.WEDDING_PRICE)
4072+ if (requester.getAdena() < Config.WEDDING_PRICE || partner.getAdena() < Config.WEDDING_PRICE)
4073 {
4074- sendHtmlMessage(player, "data/html/mods/Wedding_error_adena.htm");
4075+ sendHtmlMessage(requester, "data/html/mods/Wedding_error_adena.htm");
4076 return false;
4077 }
4078
4079@@ -223,37 +215,29 @@
4080 return true;
4081 }
4082
4083- public static void justMarried(L2PcInstance player, L2PcInstance ptarget)
4084+ public static void justMarried(L2PcInstance requester, L2PcInstance partner)
4085 {
4086 // Unlock the wedding manager for both users, and set them as married
4087- player.setUnderMarryRequest(false);
4088- ptarget.setUnderMarryRequest(false);
4089+ requester.setUnderMarryRequest(false);
4090+ partner.setUnderMarryRequest(false);
4091
4092- player.setMarried(true);
4093- ptarget.setMarried(true);
4094-
4095 // reduce adenas amount according to configs
4096- player.reduceAdena("Wedding", Config.WEDDING_PRICE, player.getCurrentFolkNPC(), true);
4097- ptarget.reduceAdena("Wedding", Config.WEDDING_PRICE, player.getCurrentFolkNPC(), true);
4098+ requester.reduceAdena("Wedding", Config.WEDDING_PRICE, requester.getCurrentFolkNPC(), true);
4099+ partner.reduceAdena("Wedding", Config.WEDDING_PRICE, requester.getCurrentFolkNPC(), true);
4100
4101- // Flag players as married
4102- Couple couple = CoupleManager.getInstance().getCouple(player.getCoupleId());
4103- couple.marry();
4104-
4105 // Messages to the couple
4106- player.sendMessage("Congratulations, you are now married with " + ptarget.getName() + " !");
4107- ptarget.sendMessage("Congratulations, you are now married with " + player.getName() + " !");
4108+ requester.sendMessage("Congratulations, you are now married with " + partner.getName() + " !");
4109+ partner.sendMessage("Congratulations, you are now married with " + requester.getName() + " !");
4110
4111 // Wedding march
4112- player.broadcastPacket(new MagicSkillUse(player, player, 2230, 1, 1, 0));
4113- ptarget.broadcastPacket(new MagicSkillUse(ptarget, ptarget, 2230, 1, 1, 0));
4114+ requester.broadcastPacket(new MagicSkillUse(requester, requester, 2230, 1, 1, 0));
4115+ partner.broadcastPacket(new MagicSkillUse(partner, partner, 2230, 1, 1, 0));
4116
4117 // Fireworks
4118- L2Skill skill = FrequentSkill.LARGE_FIREWORK.getSkill();
4119- player.doCast(skill);
4120- ptarget.doCast(skill);
4121+ requester.doCast(FrequentSkill.LARGE_FIREWORK.getSkill());
4122+ partner.doCast(FrequentSkill.LARGE_FIREWORK.getSkill());
4123
4124- Broadcast.announceToOnlinePlayers("Congratulations to " + player.getName() + " and " + ptarget.getName() + "! They have been married.");
4125+ Broadcast.announceToOnlinePlayers("Congratulations to " + requester.getName() + " and " + partner.getName() + "! They have been married.");
4126 }
4127
4128 private void sendHtmlMessage(L2PcInstance player, String file)
4129Index: GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java
4130===================================================================
4131--- GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (révision 553)
4132+++ GameServer/java/net/sf/l2j/gameserver/model/actor/instance/L2PcInstance.java (révision 568)
4133@@ -94,7 +94,7 @@
4134 import net.sf.l2j.gameserver.model.L2Skill;
4135 import net.sf.l2j.gameserver.model.L2Skill.SkillTargetType;
4136 import net.sf.l2j.gameserver.model.L2SkillLearn;
4137-import net.sf.l2j.gameserver.model.L2World;
4138+import net.sf.l2j.gameserver.model.World;
4139 import net.sf.l2j.gameserver.model.Location;
4140 import net.sf.l2j.gameserver.model.MacroList;
4141 import net.sf.l2j.gameserver.model.PetDataEntry;
4142@@ -200,6 +200,7 @@
4143 import net.sf.l2j.gameserver.network.serverpackets.SendTradeDone;
4144 import net.sf.l2j.gameserver.network.serverpackets.ServerClose;
4145 import net.sf.l2j.gameserver.network.serverpackets.SetupGauge;
4146+import net.sf.l2j.gameserver.network.serverpackets.SetupGauge.GaugeColor;
4147 import net.sf.l2j.gameserver.network.serverpackets.ShortBuffStatusUpdate;
4148 import net.sf.l2j.gameserver.network.serverpackets.ShortCutInit;
4149 import net.sf.l2j.gameserver.network.serverpackets.SkillCoolTime;
4150@@ -389,7 +390,6 @@
4151
4152 private int _lastCompassZone; // the last compass zone update send to the client
4153
4154- private boolean _isInWater;
4155 private boolean _isIn7sDungeon;
4156
4157 private PunishLevel _punishLevel = PunishLevel.NONE;
4158@@ -599,7 +599,6 @@
4159 private ScheduledFuture<?> _shortBuffTask;
4160 private int _shortBuffTaskSkillId;
4161
4162- private boolean _isMarried;
4163 private int _coupleId;
4164 private boolean _isUnderMarryRequest;
4165 private int _requesterId;
4166@@ -1052,7 +1051,7 @@
4167 if (qs == null)
4168 return;
4169
4170- L2Object object = L2World.getInstance().getObject(getLastQuestNpcObject());
4171+ L2Object object = World.getInstance().getObject(getLastQuestNpcObject());
4172 if (!(object instanceof L2Npc) || !isInsideRadius(object, L2Npc.INTERACTION_DISTANCE, false, false))
4173 return;
4174
4175@@ -1263,7 +1262,12 @@
4176 super.revalidateZone(force);
4177
4178 if (Config.ALLOW_WATER)
4179- checkWaterState();
4180+ {
4181+ if (isInsideZone(ZoneId.WATER))
4182+ WaterTaskManager.getInstance().add(this);
4183+ else
4184+ WaterTaskManager.getInstance().remove(this);
4185+ }
4186
4187 if (isInsideZone(ZoneId.SIEGE))
4188 {
4189@@ -2247,7 +2251,7 @@
4190 {
4191 if (_throneId != 0)
4192 {
4193- final L2Object object = L2World.getInstance().getObject(_throneId);
4194+ final L2Object object = World.getInstance().getObject(_throneId);
4195 if (object instanceof L2StaticObjectInstance)
4196 ((L2StaticObjectInstance) object).setBusy(false);
4197
4198@@ -2284,7 +2288,7 @@
4199 {
4200 if (_throneId != 0)
4201 {
4202- final L2Object object = L2World.getInstance().getObject(_throneId);
4203+ final L2Object object = World.getInstance().getObject(_throneId);
4204 if (object instanceof L2StaticObjectInstance)
4205 ((L2StaticObjectInstance) object).setBusy(false);
4206
4207@@ -2934,7 +2938,7 @@
4208
4209 public ItemInstance checkItemManipulation(int objectId, int count)
4210 {
4211- if (L2World.getInstance().getObject(objectId) == null)
4212+ if (World.getInstance().getObject(objectId) == null)
4213 return null;
4214
4215 final ItemInstance item = getInventory().getItemByObjectId(objectId);
4216@@ -3799,16 +3803,6 @@
4217 return armor.getItemType() instanceof ArmorType && armor.getItemType() == type;
4218 }
4219
4220- public boolean isMarried()
4221- {
4222- return _isMarried;
4223- }
4224-
4225- public void setMarried(boolean state)
4226- {
4227- _isMarried = state;
4228- }
4229-
4230 public boolean isUnderMarryRequest()
4231 {
4232 return _isUnderMarryRequest;
4233@@ -3834,21 +3828,21 @@
4234 _requesterId = requesterId;
4235 }
4236
4237- public void EngageAnswer(int answer)
4238+ public void engageAnswer(int answer)
4239 {
4240 if (!_isUnderMarryRequest || _requesterId == 0)
4241 return;
4242
4243- L2PcInstance ptarget = L2World.getInstance().getPlayer(_requesterId);
4244- if (ptarget != null)
4245+ final L2PcInstance requester = World.getInstance().getPlayer(_requesterId);
4246+ if (requester != null)
4247 {
4248 if (answer == 1)
4249 {
4250 // Create the couple
4251- CoupleManager.getInstance().createCouple(ptarget, this);
4252+ CoupleManager.getInstance().addCouple(requester, this);
4253
4254 // Then "finish the job"
4255- L2WeddingManagerInstance.justMarried(ptarget, this);
4256+ L2WeddingManagerInstance.justMarried(requester, this);
4257 }
4258 else
4259 {
4260@@ -3855,8 +3849,8 @@
4261 setUnderMarryRequest(false);
4262 sendMessage("You declined your partner's marriage request.");
4263
4264- ptarget.setUnderMarryRequest(false);
4265- ptarget.sendMessage("Your partner declined your marriage request.");
4266+ requester.setUnderMarryRequest(false);
4267+ requester.sendMessage("Your partner declined your marriage request.");
4268 }
4269 }
4270 }
4271@@ -3976,7 +3970,7 @@
4272 // calculate death penalty buff
4273 calculateDeathPenaltyBuffLevel(killer);
4274
4275- stopWaterTask();
4276+ WaterTaskManager.getInstance().remove(this);
4277
4278 if (isPhoenixBlessed() || (isAffected(L2EffectFlag.CHARM_OF_COURAGE) && isInSiege()))
4279 reviveRequest(this, null, false);
4280@@ -4269,7 +4263,7 @@
4281 public void stopAllTimers()
4282 {
4283 stopHpMpRegeneration();
4284- stopWaterTask();
4285+ WaterTaskManager.getInstance().remove(this);
4286 stopFeed();
4287
4288 _petTemplate = null;
4289@@ -4892,7 +4886,8 @@
4290
4291 public boolean dismount()
4292 {
4293- sendPacket(new SetupGauge(3, 0, 0));
4294+ sendPacket(new SetupGauge(GaugeColor.GREEN, 0));
4295+
4296 int petId = _mountNpcId;
4297 if (setMount(0, 0, 0))
4298 {
4299@@ -4982,7 +4977,7 @@
4300 {
4301 setCurrentFeed(((L2PetInstance) getPet()).getCurrentFed());
4302 _controlItemId = getPet().getControlItemId();
4303- sendPacket(new SetupGauge(3, getCurrentFeed() * 10000 / getFeedConsume(), _petData.getMaxMeal() * 10000 / getFeedConsume()));
4304+ sendPacket(new SetupGauge(GaugeColor.GREEN, getCurrentFeed() * 10000 / getFeedConsume(), _petData.getMaxMeal() * 10000 / getFeedConsume()));
4305 if (!isDead())
4306 _mountFeedTask = ThreadPool.scheduleAtFixedRate(new FeedTask(), 10000, 10000);
4307 }
4308@@ -4989,7 +4984,7 @@
4309 else if (_canFeed)
4310 {
4311 setCurrentFeed(_petData.getMaxMeal());
4312- sendPacket(new SetupGauge(3, getCurrentFeed() * 10000 / getFeedConsume(), _petData.getMaxMeal() * 10000 / getFeedConsume()));
4313+ sendPacket(new SetupGauge(GaugeColor.GREEN, getCurrentFeed() * 10000 / getFeedConsume(), _petData.getMaxMeal() * 10000 / getFeedConsume()));
4314 if (!isDead())
4315 _mountFeedTask = ThreadPool.scheduleAtFixedRate(new FeedTask(), 10000, 10000);
4316 }
4317@@ -5026,8 +5021,9 @@
4318
4319 public void setCurrentFeed(int num)
4320 {
4321- _curFeed = (num > _petData.getMaxMeal()) ? _petData.getMaxMeal() : num;
4322- sendPacket(new SetupGauge(3, getCurrentFeed() * 10000 / getFeedConsume(), _petData.getMaxMeal() * 10000 / getFeedConsume()));
4323+ _curFeed = Math.min(num, _petData.getMaxMeal());
4324+
4325+ sendPacket(new SetupGauge(GaugeColor.GREEN, getCurrentFeed() * 10000 / getFeedConsume(), _petData.getMaxMeal() * 10000 / getFeedConsume()));
4326 }
4327
4328 /**
4329@@ -5434,7 +5430,7 @@
4330 }
4331
4332 // Restore pet if exists in the world
4333- player.setPet(L2World.getInstance().getPet(player.getObjectId()));
4334+ player.setPet(World.getInstance().getPet(player.getObjectId()));
4335 if (player.getPet() != null)
4336 player.getPet().setOwner(player);
4337
4338@@ -6763,13 +6759,6 @@
4339 if (skill.isSiegeSummonSkill() && (!SiegeManager.checkIfOkToSummon(this) || !SevenSigns.getInstance().checkSummonConditions(this)))
4340 return false;
4341
4342- // Check if this skill is enabled (ex : reuse time)
4343- if (isSkillDisabled(skill))
4344- {
4345- sendPacket(SystemMessage.getSystemMessage(SystemMessageId.S1_PREPARED_FOR_REUSE).addSkillName(skill));
4346- return false;
4347- }
4348-
4349 // ************************************* Check casting conditions *******************************************
4350
4351 // Check if all casting conditions are completed
4352@@ -7067,7 +7056,7 @@
4353 if (objectId == getObjectId())
4354 return true;
4355
4356- final L2PcInstance looter = L2World.getInstance().getPlayer(objectId);
4357+ final L2PcInstance looter = World.getInstance().getPlayer(objectId);
4358 if (looter == null)
4359 return false;
4360
4361@@ -8402,36 +8391,6 @@
4362 return _subclassLock.isLocked();
4363 }
4364
4365- public void stopWaterTask()
4366- {
4367- if (_isInWater)
4368- {
4369- _isInWater = false;
4370- sendPacket(new SetupGauge(2, 0));
4371- WaterTaskManager.getInstance().remove(this);
4372- }
4373- }
4374-
4375- public void startWaterTask()
4376- {
4377- if (!isDead() && !_isInWater)
4378- {
4379- _isInWater = true;
4380- final int time = (int) calcStat(Stats.BREATH, 60000 * getRace().getBreathMultiplier(), this, null);
4381-
4382- sendPacket(new SetupGauge(2, time));
4383- WaterTaskManager.getInstance().add(this, time);
4384- }
4385- }
4386-
4387- public void checkWaterState()
4388- {
4389- if (isInsideZone(ZoneId.WATER))
4390- startWaterTask();
4391- else
4392- stopWaterTask();
4393- }
4394-
4395 public void onPlayerEnter()
4396 {
4397 if (isCursedWeaponEquipped())
4398@@ -9000,12 +8959,12 @@
4399
4400 if (isSeated())
4401 {
4402- final L2Object object = L2World.getInstance().getObject(_throneId);
4403+ final L2Object object = World.getInstance().getObject(_throneId);
4404 if (object instanceof L2StaticObjectInstance)
4405 ((L2StaticObjectInstance) object).setBusy(false);
4406 }
4407
4408- L2World.getInstance().removePlayer(this); // force remove in case of crash during teleport
4409+ World.getInstance().removePlayer(this); // force remove in case of crash during teleport
4410
4411 // friends & blocklist update
4412 notifyFriends(false);
4413@@ -10382,7 +10341,7 @@
4414 {
4415 for (int id : _friendList)
4416 {
4417- L2PcInstance friend = L2World.getInstance().getPlayer(id);
4418+ L2PcInstance friend = World.getInstance().getPlayer(id);
4419 if (friend != null)
4420 {
4421 friend.sendPacket(new FriendList(friend));
4422@@ -10438,7 +10397,7 @@
4423
4424 if (isSeated())
4425 {
4426- final L2Object object = L2World.getInstance().getObject(_throneId);
4427+ final L2Object object = World.getInstance().getObject(_throneId);
4428 if (object instanceof L2StaticObjectInstance)
4429 activeChar.sendPacket(new ChairSit(getObjectId(), ((L2StaticObjectInstance) object).getStaticObjectId()));
4430 }
4431Index: GameServer/java/net/sf/l2j/gameserver/model/actor/L2Npc.java
4432===================================================================
4433--- GameServer/java/net/sf/l2j/gameserver/model/actor/L2Npc.java (révision 553)
4434+++ GameServer/java/net/sf/l2j/gameserver/model/actor/L2Npc.java (révision 568)
4435@@ -96,7 +96,7 @@
4436 */
4437 public class L2Npc extends L2Character
4438 {
4439- public static final int INTERACTION_DISTANCE = 150;
4440+ public static final int INTERACTION_DISTANCE = 100;
4441 private static final int SOCIAL_INTERVAL = 12000;
4442
4443 private L2Spawn _spawn;
4444Index: GameServer/java/net/sf/l2j/gameserver/model/BlockList.java
4445===================================================================
4446--- GameServer/java/net/sf/l2j/gameserver/model/BlockList.java (révision 553)
4447+++ GameServer/java/net/sf/l2j/gameserver/model/BlockList.java (révision 568)
4448@@ -184,7 +184,7 @@
4449 sm.addString(charName);
4450 listOwner.sendPacket(sm);
4451
4452- L2PcInstance player = L2World.getInstance().getPlayer(targetId);
4453+ L2PcInstance player = World.getInstance().getPlayer(targetId);
4454
4455 if (player != null)
4456 {
4457@@ -249,7 +249,7 @@
4458 */
4459 public static boolean isInBlockList(int ownerId, int targetId)
4460 {
4461- L2PcInstance player = L2World.getInstance().getPlayer(ownerId);
4462+ L2PcInstance player = World.getInstance().getPlayer(ownerId);
4463
4464 if (player != null)
4465 return BlockList.isBlocked(player, targetId);
4466Index: GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2DynamicZone.java
4467===================================================================
4468--- GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2DynamicZone.java (révision 553)
4469+++ GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2DynamicZone.java (révision 568)
4470@@ -19,7 +19,7 @@
4471 import net.sf.l2j.commons.concurrent.ThreadPool;
4472
4473 import net.sf.l2j.gameserver.model.L2Skill;
4474-import net.sf.l2j.gameserver.model.L2WorldRegion;
4475+import net.sf.l2j.gameserver.model.WorldRegion;
4476 import net.sf.l2j.gameserver.model.actor.L2Character;
4477 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
4478 import net.sf.l2j.gameserver.model.zone.L2ZoneType;
4479@@ -30,12 +30,12 @@
4480 */
4481 public class L2DynamicZone extends L2ZoneType
4482 {
4483- private final L2WorldRegion _region;
4484+ private final WorldRegion _region;
4485 private final L2Character _owner;
4486 private Future<?> _task;
4487 private final L2Skill _skill;
4488
4489- public L2DynamicZone(L2WorldRegion region, L2Character owner, L2Skill skill)
4490+ public L2DynamicZone(WorldRegion region, L2Character owner, L2Skill skill)
4491 {
4492 super(-1);
4493 _region = region;
4494Index: GameServer/java/net/sf/l2j/gameserver/model/olympiad/AbstractOlympiadGame.java
4495===================================================================
4496--- GameServer/java/net/sf/l2j/gameserver/model/olympiad/AbstractOlympiadGame.java (révision 553)
4497+++ GameServer/java/net/sf/l2j/gameserver/model/olympiad/AbstractOlympiadGame.java (révision 568)
4498@@ -242,10 +242,10 @@
4499 }
4500
4501 /**
4502- * Buff and heal the player. WW2 for fighter/mage + haste 1 if fighter.
4503+ * Buff the player. WW2 for fighter/mage + haste 1 if fighter.
4504 * @param player : the happy benefactor.
4505 */
4506- protected static final void buffAndHealPlayer(L2PcInstance player)
4507+ protected static final void buffPlayer(L2PcInstance player)
4508 {
4509 L2Skill skill = SkillTable.getInstance().getInfo(1204, 2); // Windwalk 2
4510 if (skill != null)
4511@@ -263,8 +263,14 @@
4512 player.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT).addSkillName(1086));
4513 }
4514 }
4515-
4516- // Heal Player fully
4517+ }
4518+
4519+ /**
4520+ * Heal the player.
4521+ * @param player : the happy benefactor.
4522+ */
4523+ protected static final void healPlayer(L2PcInstance player)
4524+ {
4525 player.setCurrentCp(player.getMaxCp());
4526 player.setCurrentHp(player.getMaxHp());
4527 player.setCurrentMp(player.getMaxMp());
4528@@ -405,8 +411,10 @@
4529
4530 protected abstract void removals();
4531
4532- protected abstract void buffAndHealPlayers();
4533+ protected abstract void buffPlayers();
4534
4535+ protected abstract void healPlayers();
4536+
4537 protected abstract boolean portPlayersToArena(List<Location> spawns);
4538
4539 protected abstract void cleanEffects();
4540Index: GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/ItemContainer.java
4541===================================================================
4542--- GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/ItemContainer.java (révision 553)
4543+++ GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/ItemContainer.java (révision 568)
4544@@ -29,7 +29,7 @@
4545 import net.sf.l2j.L2DatabaseFactory;
4546 import net.sf.l2j.gameserver.datatables.ItemTable;
4547 import net.sf.l2j.gameserver.model.L2Object;
4548-import net.sf.l2j.gameserver.model.L2World;
4549+import net.sf.l2j.gameserver.model.World;
4550 import net.sf.l2j.gameserver.model.actor.L2Character;
4551 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
4552 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
4553@@ -509,7 +509,7 @@
4554 for (ItemInstance item : _items)
4555 {
4556 item.updateDatabase();
4557- L2World.getInstance().removeObject(item);
4558+ World.getInstance().removeObject(item);
4559 }
4560 }
4561 _items.clear();
4562@@ -545,7 +545,7 @@
4563 if (item == null)
4564 continue;
4565
4566- L2World.getInstance().addObject(item);
4567+ World.getInstance().addObject(item);
4568
4569 L2PcInstance owner = (getOwner() == null) ? null : getOwner().getActingPlayer();
4570
4571Index: GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2WaterZone.java
4572===================================================================
4573--- GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2WaterZone.java (révision 553)
4574+++ GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2WaterZone.java (révision 568)
4575@@ -53,7 +53,6 @@
4576 {
4577 character.setInsideZone(ZoneId.WATER, false);
4578
4579- // TODO: update to only send speed status when that packet is known
4580 if (character instanceof L2PcInstance)
4581 ((L2PcInstance) character).broadcastUserInfo();
4582 else if (character instanceof L2Npc)
4583Index: GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGameTask.java
4584===================================================================
4585--- GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGameTask.java (révision 553)
4586+++ GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGameTask.java (révision 568)
4587@@ -205,7 +205,10 @@
4588 _zone.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.THE_GAME_WILL_START_IN_S1_SECOND_S).addNumber(_countDown));
4589
4590 if (_countDown == 20)
4591- _game.buffAndHealPlayers();
4592+ {
4593+ _game.buffPlayers();
4594+ _game.healPlayers();
4595+ }
4596
4597 delay = getDelay(BATTLE_START_TIME);
4598 if (_countDown <= 0)
4599@@ -217,7 +220,10 @@
4600 case BATTLE_STARTED:
4601 {
4602 _countDown = 0;
4603+
4604+ _game.healPlayers();
4605 _game.resetDamage();
4606+
4607 _state = GameState.BATTLE_IN_PROGRESS; // set state first, used in zone update
4608 if (!startBattle())
4609 _state = GameState.GAME_STOPPED;
4610Index: GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/Inventory.java
4611===================================================================
4612--- GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/Inventory.java (révision 553)
4613+++ GameServer/java/net/sf/l2j/gameserver/model/itemcontainer/Inventory.java (révision 568)
4614@@ -25,7 +25,7 @@
4615 import net.sf.l2j.L2DatabaseFactory;
4616 import net.sf.l2j.gameserver.datatables.ItemTable;
4617 import net.sf.l2j.gameserver.model.L2Object;
4618-import net.sf.l2j.gameserver.model.L2World;
4619+import net.sf.l2j.gameserver.model.World;
4620 import net.sf.l2j.gameserver.model.actor.L2Playable;
4621 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
4622 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
4623@@ -956,7 +956,7 @@
4624 item.setLocation(ItemLocation.INVENTORY);
4625 }
4626
4627- L2World.getInstance().addObject(item);
4628+ World.getInstance().addObject(item);
4629
4630 // If stackable item is found in inventory just add to current quantity
4631 if (item.isStackable() && getItemByItemId(item.getItemId()) != null)
4632Index: GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectStun.java
4633===================================================================
4634--- GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectStun.java (révision 553)
4635+++ GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectStun.java (révision 568)
4636@@ -55,6 +55,12 @@
4637 }
4638
4639 @Override
4640+ public boolean onSameEffect(L2Effect effect)
4641+ {
4642+ return false;
4643+ }
4644+
4645+ @Override
4646 public int getEffectFlags()
4647 {
4648 return L2EffectFlag.STUNNED.getMask();
4649Index: GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGameNormal.java
4650===================================================================
4651--- GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGameNormal.java (révision 553)
4652+++ GameServer/java/net/sf/l2j/gameserver/model/olympiad/OlympiadGameNormal.java (révision 568)
4653@@ -24,7 +24,7 @@
4654
4655 import net.sf.l2j.Config;
4656 import net.sf.l2j.L2DatabaseFactory;
4657-import net.sf.l2j.gameserver.model.L2World;
4658+import net.sf.l2j.gameserver.model.World;
4659 import net.sf.l2j.gameserver.model.Location;
4660 import net.sf.l2j.gameserver.model.actor.L2Character;
4661 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
4662@@ -68,11 +68,11 @@
4663 while (list.size() > 1)
4664 {
4665 playerOneObjectId = list.remove(Rnd.get(list.size()));
4666- playerOne = L2World.getInstance().getPlayer(playerOneObjectId);
4667+ playerOne = World.getInstance().getPlayer(playerOneObjectId);
4668 if (playerOne == null || !playerOne.isOnline())
4669 continue;
4670
4671- playerTwo = L2World.getInstance().getPlayer(list.remove(Rnd.get(list.size())));
4672+ playerTwo = World.getInstance().getPlayer(list.remove(Rnd.get(list.size())));
4673 if (playerTwo == null || !playerTwo.isOnline())
4674 {
4675 list.add(playerOneObjectId);
4676@@ -160,16 +160,26 @@
4677 }
4678
4679 @Override
4680- protected final void buffAndHealPlayers()
4681+ protected final void buffPlayers()
4682 {
4683 if (_aborted)
4684 return;
4685
4686- buffAndHealPlayer(_playerOne.player);
4687- buffAndHealPlayer(_playerTwo.player);
4688+ buffPlayer(_playerOne.player);
4689+ buffPlayer(_playerTwo.player);
4690 }
4691
4692 @Override
4693+ protected final void healPlayers()
4694+ {
4695+ if (_aborted)
4696+ return;
4697+
4698+ healPlayer(_playerOne.player);
4699+ healPlayer(_playerTwo.player);
4700+ }
4701+
4702+ @Override
4703 protected final boolean makeCompetitionStart()
4704 {
4705 if (!super.makeCompetitionStart())
4706Index: GameServer/java/net/sf/l2j/gameserver/model/tradelist/TradeList.java
4707===================================================================
4708--- GameServer/java/net/sf/l2j/gameserver/model/tradelist/TradeList.java (révision 553)
4709+++ GameServer/java/net/sf/l2j/gameserver/model/tradelist/TradeList.java (révision 568)
4710@@ -23,7 +23,7 @@
4711 import net.sf.l2j.gameserver.datatables.ItemTable;
4712 import net.sf.l2j.gameserver.model.ItemRequest;
4713 import net.sf.l2j.gameserver.model.L2Object;
4714-import net.sf.l2j.gameserver.model.L2World;
4715+import net.sf.l2j.gameserver.model.World;
4716 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
4717 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
4718 import net.sf.l2j.gameserver.model.item.kind.Item;
4719@@ -187,7 +187,7 @@
4720 if (isLocked())
4721 return null;
4722
4723- L2Object o = L2World.getInstance().getObject(objectId);
4724+ L2Object o = World.getInstance().getObject(objectId);
4725 if (!(o instanceof ItemInstance))
4726 return null;
4727
4728@@ -395,7 +395,7 @@
4729 private boolean validate()
4730 {
4731 // Check for Owner validity
4732- if (_owner == null || L2World.getInstance().getPlayer(_owner.getObjectId()) == null)
4733+ if (_owner == null || World.getInstance().getPlayer(_owner.getObjectId()) == null)
4734 return false;
4735
4736 // Check for Item validity
4737Index: GameServer/java/net/sf/l2j/gameserver/model/WorldRegion.java
4738===================================================================
4739--- GameServer/java/net/sf/l2j/gameserver/model/WorldRegion.java (nonexistent)
4740+++ GameServer/java/net/sf/l2j/gameserver/model/WorldRegion.java (révision 568)
4741@@ -0,0 +1,338 @@
4742+/*
4743+ * This program is free software: you can redistribute it and/or modify it under
4744+ * the terms of the GNU General Public License as published by the Free Software
4745+ * Foundation, either version 3 of the License, or (at your option) any later
4746+ * version.
4747+ *
4748+ * This program is distributed in the hope that it will be useful, but WITHOUT
4749+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
4750+ * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
4751+ * details.
4752+ *
4753+ * You should have received a copy of the GNU General Public License along with
4754+ * this program. If not, see <http://www.gnu.org/licenses/>.
4755+ */
4756+package net.sf.l2j.gameserver.model;
4757+
4758+import java.util.ArrayList;
4759+import java.util.List;
4760+import java.util.concurrent.ScheduledFuture;
4761+import java.util.concurrent.locks.Lock;
4762+import java.util.concurrent.locks.ReentrantLock;
4763+
4764+import net.sf.l2j.commons.concurrent.ThreadPool;
4765+
4766+import net.sf.l2j.gameserver.ai.CtrlIntention;
4767+import net.sf.l2j.gameserver.model.actor.L2Attackable;
4768+import net.sf.l2j.gameserver.model.actor.L2Character;
4769+import net.sf.l2j.gameserver.model.actor.L2Npc;
4770+import net.sf.l2j.gameserver.model.actor.L2Vehicle;
4771+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
4772+import net.sf.l2j.gameserver.model.zone.L2ZoneType;
4773+import net.sf.l2j.gameserver.model.zone.type.L2DerbyTrackZone;
4774+import net.sf.l2j.gameserver.model.zone.type.L2PeaceZone;
4775+import net.sf.l2j.gameserver.model.zone.type.L2TownZone;
4776+
4777+public final class WorldRegion
4778+{
4779+ private final List<L2Object> _objects = new ArrayList<>();
4780+ private final List<WorldRegion> _surroundingRegions = new ArrayList<>();
4781+ private final List<L2ZoneType> _zones = new ArrayList<>();
4782+
4783+ private final int _tileX;
4784+ private final int _tileY;
4785+
4786+ private final Lock _lock = new ReentrantLock();
4787+
4788+ private boolean _active;
4789+ private ScheduledFuture<?> _activateTask;
4790+ private int _playersCount;
4791+
4792+ public WorldRegion(int x, int y)
4793+ {
4794+ _tileX = x;
4795+ _tileY = y;
4796+ }
4797+
4798+ @Override
4799+ public String toString()
4800+ {
4801+ return "WorldRegion [_tileX=" + _tileX + ", _tileY=" + _tileY + ", _active=" + _active + ", _playersCount=" + _playersCount + "]";
4802+ }
4803+
4804+ public List<L2Object> getObjects()
4805+ {
4806+ return _objects;
4807+ }
4808+
4809+ public void addSurroundingRegion(WorldRegion region)
4810+ {
4811+ _surroundingRegions.add(region);
4812+ }
4813+
4814+ public List<WorldRegion> getSurroundingRegions()
4815+ {
4816+ return _surroundingRegions;
4817+ }
4818+
4819+ public List<L2ZoneType> getZones()
4820+ {
4821+ return _zones;
4822+ }
4823+
4824+ public void addZone(L2ZoneType zone)
4825+ {
4826+ _zones.add(zone);
4827+ }
4828+
4829+ public void removeZone(L2ZoneType zone)
4830+ {
4831+ _zones.remove(zone);
4832+ }
4833+
4834+ public void revalidateZones(L2Character character)
4835+ {
4836+ // Do NOT update the world region while the character is still in the process of teleporting
4837+ if (character.isTeleporting())
4838+ return;
4839+
4840+ _zones.forEach(z -> z.revalidateInZone(character));
4841+ }
4842+
4843+ public void removeFromZones(L2Character character)
4844+ {
4845+ _zones.forEach(z -> z.removeCharacter(character));
4846+ }
4847+
4848+ public boolean containsZone(int zoneId)
4849+ {
4850+ for (L2ZoneType z : _zones)
4851+ {
4852+ if (z.getId() == zoneId)
4853+ return true;
4854+ }
4855+ return false;
4856+ }
4857+
4858+ public boolean checkEffectRangeInsidePeaceZone(L2Skill skill, final int x, final int y, final int z)
4859+ {
4860+ final int range = skill.getEffectRange();
4861+ final int up = y + range;
4862+ final int down = y - range;
4863+ final int left = x + range;
4864+ final int right = x - range;
4865+
4866+ for (L2ZoneType e : _zones)
4867+ {
4868+ if ((e instanceof L2TownZone && ((L2TownZone) e).isPeaceZone()) || e instanceof L2DerbyTrackZone || e instanceof L2PeaceZone)
4869+ {
4870+ if (e.isInsideZone(x, up, z))
4871+ return false;
4872+
4873+ if (e.isInsideZone(x, down, z))
4874+ return false;
4875+
4876+ if (e.isInsideZone(left, y, z))
4877+ return false;
4878+
4879+ if (e.isInsideZone(right, y, z))
4880+ return false;
4881+
4882+ if (e.isInsideZone(x, y, z))
4883+ return false;
4884+ }
4885+ }
4886+ return true;
4887+ }
4888+
4889+ public void onDeath(L2Character character)
4890+ {
4891+ _zones.stream().filter(z -> z.isCharacterInZone(character)).forEach(z -> z.onDieInside(character));
4892+ }
4893+
4894+ public void onRevive(L2Character character)
4895+ {
4896+ _zones.stream().filter(z -> z.isCharacterInZone(character)).forEach(z -> z.onReviveInside(character));
4897+ }
4898+
4899+ public boolean isActive()
4900+ {
4901+ return _active;
4902+ }
4903+
4904+ public int getPlayersCount()
4905+ {
4906+ return _playersCount;
4907+ }
4908+
4909+ /**
4910+ * Check if all 9 neighbors (including self) are inactive or active but with no players.
4911+ * @return true if the above condition is met.
4912+ */
4913+ public boolean areNeighborsEmpty()
4914+ {
4915+ // if this region is occupied, return false.
4916+ if (isActive() && _playersCount != 0)
4917+ return false;
4918+
4919+ // if any one of the neighbors is occupied, return false
4920+ for (WorldRegion neighbor : _surroundingRegions)
4921+ {
4922+ if (neighbor.isActive() && neighbor.getPlayersCount() != 0)
4923+ return false;
4924+ }
4925+
4926+ // in all other cases, return true.
4927+ return true;
4928+ }
4929+
4930+ /**
4931+ * This function turns this region's AI and geodata on or off
4932+ * @param value
4933+ */
4934+ public void setActive(boolean value)
4935+ {
4936+ if (_active == value)
4937+ return;
4938+
4939+ _active = value;
4940+
4941+ // turn the AI on or off to match the region's activation.
4942+ if (!value)
4943+ {
4944+ for (L2Object o : _objects)
4945+ {
4946+ if (o instanceof L2Attackable)
4947+ {
4948+ L2Attackable mob = (L2Attackable) o;
4949+
4950+ // Set target to null and cancel Attack or Cast
4951+ mob.setTarget(null);
4952+
4953+ // Stop movement
4954+ mob.stopMove(null);
4955+
4956+ // Stop all active skills effects in progress on the L2Character
4957+ mob.stopAllEffects();
4958+
4959+ mob.getAggroList().clear();
4960+ mob.getAttackByList().clear();
4961+ mob.getKnownList().removeAllKnownObjects();
4962+
4963+ // stop the ai tasks
4964+ if (mob.hasAI())
4965+ {
4966+ mob.getAI().setIntention(CtrlIntention.IDLE);
4967+ mob.getAI().stopAITask();
4968+ }
4969+ }
4970+ else if (o instanceof L2Vehicle)
4971+ ((L2Vehicle) o).getKnownList().removeAllKnownObjects();
4972+ }
4973+ }
4974+ else
4975+ {
4976+ for (L2Object o : _objects)
4977+ {
4978+ if (o instanceof L2Attackable)
4979+ ((L2Attackable) o).getStatus().startHpMpRegeneration();
4980+ else if (o instanceof L2Npc)
4981+ ((L2Npc) o).startRandomAnimationTimer();
4982+ }
4983+ }
4984+ }
4985+
4986+ public void addVisibleObject(L2Object object)
4987+ {
4988+ if (object == null)
4989+ return;
4990+
4991+ _lock.lock();
4992+ try
4993+ {
4994+ _objects.add(object);
4995+
4996+ if (object instanceof L2PcInstance)
4997+ {
4998+ // if this is the first player to enter the region, activate self & neighbors
4999+ if (_playersCount++ == 0)
5000+ {
5001+ // first set self to active and do self-tasks...
5002+ setActive(true);
5003+
5004+ // if the timer to deactivate neighbors is running, cancel it.
5005+ if (_activateTask != null)
5006+ _activateTask.cancel(true);
5007+
5008+ // then, set a timer to activate the neighbors
5009+ _activateTask = ThreadPool.schedule(new ActivateTask(true), 1000);
5010+ }
5011+ }
5012+ }
5013+ finally
5014+ {
5015+ _lock.unlock();
5016+ }
5017+ }
5018+
5019+ public void removeVisibleObject(L2Object object)
5020+ {
5021+ if (object == null)
5022+ return;
5023+
5024+ _lock.lock();
5025+ try
5026+ {
5027+ _objects.remove(object);
5028+
5029+ if (object instanceof L2PcInstance)
5030+ {
5031+ if (--_playersCount == 0)
5032+ {
5033+ // if the timer to activate neighbors is running, cancel it.
5034+ if (_activateTask != null)
5035+ _activateTask.cancel(true);
5036+
5037+ // start a timer to "suggest" a deactivate to self and neighbors.
5038+ // suggest means: first check if a neighbor has L2PcInstances in it. If not, deactivate.
5039+ _activateTask = ThreadPool.schedule(new ActivateTask(false), 60000);
5040+ }
5041+ }
5042+ }
5043+ finally
5044+ {
5045+ _lock.unlock();
5046+ }
5047+ }
5048+
5049+ public class ActivateTask implements Runnable
5050+ {
5051+ private final boolean _isActivating;
5052+
5053+ public ActivateTask(boolean isActivating)
5054+ {
5055+ _isActivating = isActivating;
5056+ }
5057+
5058+ @Override
5059+ public void run()
5060+ {
5061+ if (_isActivating)
5062+ {
5063+ // for each neighbor, if it's not active, activate.
5064+ for (WorldRegion neighbor : getSurroundingRegions())
5065+ neighbor.setActive(true);
5066+ }
5067+ else
5068+ {
5069+ if (areNeighborsEmpty())
5070+ setActive(false);
5071+
5072+ // check and deactivate
5073+ for (WorldRegion neighbor : getSurroundingRegions())
5074+ if (neighbor.areNeighborsEmpty())
5075+ neighbor.setActive(false);
5076+ }
5077+ }
5078+ }
5079+}
5080\ No newline at end of file
5081Index: GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2BossZone.java
5082===================================================================
5083--- GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2BossZone.java (révision 553)
5084+++ GameServer/java/net/sf/l2j/gameserver/model/zone/type/L2BossZone.java (révision 568)
5085@@ -192,19 +192,15 @@
5086
5087 for (L2Attackable raid : getKnownTypeInside(L2Attackable.class))
5088 {
5089- if (raid.isRaid())
5090- {
5091- if (raid.getSpawn() == null || raid.isDead())
5092- continue;
5093-
5094- if (!raid.isInsideRadius(raid.getSpawn().getLocX(), raid.getSpawn().getLocY(), 150, false))
5095- raid.returnHome();
5096- }
5097+ if (!raid.isRaid())
5098+ continue;
5099+
5100+ raid.returnHome(true);
5101 }
5102 }
5103 }
5104- else if (character instanceof L2Attackable && character.isRaid() && !character.isDead())
5105- ((L2Attackable) character).returnHome();
5106+ else if (character instanceof L2Attackable && character.isRaid())
5107+ ((L2Attackable) character).returnHome(true);
5108 }
5109
5110 /**
5111Index: GameServer/java/net/sf/l2j/gameserver/model/olympiad/Participant.java
5112===================================================================
5113--- GameServer/java/net/sf/l2j/gameserver/model/olympiad/Participant.java (révision 553)
5114+++ GameServer/java/net/sf/l2j/gameserver/model/olympiad/Participant.java (révision 568)
5115@@ -14,7 +14,7 @@
5116 */
5117 package net.sf.l2j.gameserver.model.olympiad;
5118
5119-import net.sf.l2j.gameserver.model.L2World;
5120+import net.sf.l2j.gameserver.model.World;
5121 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5122 import net.sf.l2j.gameserver.templates.StatsSet;
5123
5124@@ -55,7 +55,7 @@
5125 public final void updatePlayer()
5126 {
5127 if (player == null || !player.isOnline())
5128- player = L2World.getInstance().getPlayer(objectId);
5129+ player = World.getInstance().getPlayer(objectId);
5130 }
5131
5132 public final void updateStat(String statName, int increment)
5133Index: GameServer/java/net/sf/l2j/gameserver/model/CharEffectList.java
5134===================================================================
5135--- GameServer/java/net/sf/l2j/gameserver/model/CharEffectList.java (révision 553)
5136+++ GameServer/java/net/sf/l2j/gameserver/model/CharEffectList.java (révision 568)
5137@@ -288,6 +288,7 @@
5138 switch (e.getSkill().getSkillType())
5139 {
5140 case BUFF:
5141+ case COMBATPOINTHEAL:
5142 case REFLECT:
5143 case HEAL_PERCENT:
5144 case MANAHEAL_PERCENT:
5145@@ -656,6 +657,12 @@
5146 // array modified, then rebuild on next request
5147 _rebuildCache = true;
5148
5149+ if (isAffected(newEffect.getEffectFlags()) && !newEffect.onSameEffect(null))
5150+ {
5151+ newEffect.stopEffectTask();
5152+ return;
5153+ }
5154+
5155 if (newSkill.isDebuff())
5156 {
5157 if (_debuffs == null)
5158@@ -704,6 +711,7 @@
5159 case REFLECT:
5160 case HEAL_PERCENT:
5161 case MANAHEAL_PERCENT:
5162+ case COMBATPOINTHEAL:
5163 for (L2Effect e : _buffs)
5164 {
5165 if (e == null)
5166@@ -715,6 +723,7 @@
5167 case REFLECT:
5168 case HEAL_PERCENT:
5169 case MANAHEAL_PERCENT:
5170+ case COMBATPOINTHEAL:
5171 e.exit();
5172 effectsToRemove--;
5173 break; // break switch()
5174@@ -1064,9 +1073,14 @@
5175 */
5176 public boolean isAffected(L2EffectFlag flag)
5177 {
5178- return (_effectFlags & flag.getMask()) != 0;
5179+ return isAffected(flag.getMask());
5180 }
5181
5182+ public boolean isAffected(int mask)
5183+ {
5184+ return (_effectFlags & mask) != 0;
5185+ }
5186+
5187 /**
5188 * Clear and null all queues and lists Use only during delete character from the world.
5189 */
5190Index: GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectSleep.java
5191===================================================================
5192--- GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectSleep.java (révision 553)
5193+++ GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectSleep.java (révision 568)
5194@@ -55,6 +55,12 @@
5195 }
5196
5197 @Override
5198+ public boolean onSameEffect(L2Effect effect)
5199+ {
5200+ return false;
5201+ }
5202+
5203+ @Override
5204 public int getEffectFlags()
5205 {
5206 return L2EffectFlag.SLEEP.getMask();
5207Index: GameServer/java/net/sf/l2j/gameserver/scripting/quests/Q420_LittleWing.java
5208===================================================================
5209--- GameServer/java/net/sf/l2j/gameserver/scripting/quests/Q420_LittleWing.java (révision 553)
5210+++ GameServer/java/net/sf/l2j/gameserver/scripting/quests/Q420_LittleWing.java (révision 568)
5211@@ -16,6 +16,7 @@
5212
5213 import net.sf.l2j.commons.random.Rnd;
5214
5215+import net.sf.l2j.gameserver.model.SpawnLocation;
5216 import net.sf.l2j.gameserver.model.actor.L2Npc;
5217 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5218 import net.sf.l2j.gameserver.scripting.Quest;
5219@@ -72,6 +73,16 @@
5220 private static final int SHAMHAI = 30752;
5221 private static final int COOPER = 30829;
5222
5223+ // Spawn Points
5224+ private static final SpawnLocation[] LOCATIONS =
5225+ {
5226+ new SpawnLocation(109816, 40854, -4640, 0),
5227+ new SpawnLocation(108940, 41615, -4643, 0),
5228+ new SpawnLocation(110395, 41625, -4642, 0)
5229+ };
5230+
5231+ private static int _counter = 0;
5232+
5233 public Q420_LittleWing()
5234 {
5235 super(420, "Little Wing");
5236@@ -78,7 +89,7 @@
5237
5238 setItemsIds(FAIRY_STONE, DELUXE_FAIRY_STONE, FAIRY_STONE_LIST, DELUXE_FAIRY_STONE_LIST, TOAD_LORD_BACK_SKIN, JUICE_OF_MONKSHOOD, SCALE_OF_DRAKE_EXARION, EGG_OF_DRAKE_EXARION, SCALE_OF_DRAKE_ZWOV, EGG_OF_DRAKE_ZWOV, SCALE_OF_DRAKE_KALIBRAN, EGG_OF_DRAKE_KALIBRAN, SCALE_OF_WYVERN_SUZET, EGG_OF_WYVERN_SUZET, SCALE_OF_WYVERN_SHAMHAI, EGG_OF_WYVERN_SHAMHAI);
5239
5240- addStartNpc(COOPER);
5241+ addStartNpc(COOPER, MIMYU);
5242 addTalkId(MARIA, CRONOS, BYRON, MIMYU, EXARION, ZWOV, KALIBRAN, SUZET, SHAMHAI, COOPER);
5243
5244 addKillId(20202, 20231, 20233, 20270, 20551, 20580, 20589, 20590, 20591, 20592, 20593, 20594, 20595, 20596, 20597, 20598, 20599);
5245@@ -278,7 +289,17 @@
5246 switch (st.getState())
5247 {
5248 case STATE_CREATED:
5249- htmltext = (player.getLevel() >= 35) ? "30829-01.htm" : "30829-03.htm";
5250+ switch (npc.getNpcId())
5251+ {
5252+ case COOPER:
5253+ htmltext = (player.getLevel() >= 35) ? "30829-01.htm" : "30829-03.htm";
5254+ break;
5255+
5256+ case MIMYU:
5257+ _counter += 1;
5258+ npc.teleToLocation(LOCATIONS[_counter % 3], 0);
5259+ return null;
5260+ }
5261 break;
5262
5263 case STATE_STARTED:
5264@@ -384,6 +405,12 @@
5265 }
5266 else if (cond == 7)
5267 htmltext = "30747-11.htm";
5268+ else
5269+ {
5270+ _counter += 1;
5271+ npc.teleToLocation(LOCATIONS[_counter % 3], 0);
5272+ return null;
5273+ }
5274 break;
5275
5276 case EXARION:
5277Index: GameServer/java/net/sf/l2j/gameserver/datatables/ItemTable.java
5278===================================================================
5279--- GameServer/java/net/sf/l2j/gameserver/datatables/ItemTable.java (révision 553)
5280+++ GameServer/java/net/sf/l2j/gameserver/datatables/ItemTable.java (révision 568)
5281@@ -27,7 +27,7 @@
5282 import net.sf.l2j.L2DatabaseFactory;
5283 import net.sf.l2j.gameserver.idfactory.IdFactory;
5284 import net.sf.l2j.gameserver.model.L2Object;
5285-import net.sf.l2j.gameserver.model.L2World;
5286+import net.sf.l2j.gameserver.model.World;
5287 import net.sf.l2j.gameserver.model.actor.L2Attackable;
5288 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5289 import net.sf.l2j.gameserver.model.item.instance.ItemInstance;
5290@@ -167,7 +167,7 @@
5291 }
5292
5293 // Add the ItemInstance object to _allObjects of L2world
5294- L2World.getInstance().addObject(item);
5295+ World.getInstance().addObject(item);
5296
5297 // Set Item parameters
5298 if (item.isStackable() && count > 1)
5299@@ -219,7 +219,7 @@
5300 item.setLocation(ItemLocation.VOID);
5301 item.setLastChange(ItemInstance.REMOVED);
5302
5303- L2World.getInstance().removeObject(item);
5304+ World.getInstance().removeObject(item);
5305 IdFactory.getInstance().releaseId(item.getObjectId());
5306
5307 if (Config.LOG_ITEMS)
5308Index: GameServer/java/net/sf/l2j/gameserver/util/Broadcast.java
5309===================================================================
5310--- GameServer/java/net/sf/l2j/gameserver/util/Broadcast.java (révision 553)
5311+++ GameServer/java/net/sf/l2j/gameserver/util/Broadcast.java (révision 568)
5312@@ -15,10 +15,10 @@
5313 package net.sf.l2j.gameserver.util;
5314
5315 import net.sf.l2j.gameserver.instancemanager.ZoneManager;
5316-import net.sf.l2j.gameserver.model.L2World;
5317-import net.sf.l2j.gameserver.model.L2WorldRegion;
5318+import net.sf.l2j.gameserver.model.L2Object;
5319+import net.sf.l2j.gameserver.model.World;
5320+import net.sf.l2j.gameserver.model.WorldRegion;
5321 import net.sf.l2j.gameserver.model.actor.L2Character;
5322-import net.sf.l2j.gameserver.model.actor.L2Playable;
5323 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5324 import net.sf.l2j.gameserver.model.zone.L2ZoneType;
5325 import net.sf.l2j.gameserver.network.clientpackets.Say2;
5326@@ -153,7 +153,7 @@
5327 */
5328 public static void toAllOnlinePlayers(L2GameServerPacket mov)
5329 {
5330- for (L2PcInstance player : L2World.getInstance().getPlayers())
5331+ for (L2PcInstance player : World.getInstance().getPlayers())
5332 {
5333 if (player.isOnline())
5334 player.sendPacket(mov);
5335@@ -165,14 +165,15 @@
5336 * @param region : The region to send packets.
5337 * @param packets : The packets to send.
5338 */
5339- public static void toAllPlayersInRegion(L2WorldRegion region, L2GameServerPacket... packets)
5340+ public static void toAllPlayersInRegion(WorldRegion region, L2GameServerPacket... packets)
5341 {
5342- for (L2Playable playable : region.getVisiblePlayable().values())
5343+ for (L2Object object : region.getObjects())
5344 {
5345- if (playable instanceof L2PcInstance)
5346+ if (object instanceof L2PcInstance)
5347 {
5348+ final L2PcInstance player = (L2PcInstance) object;
5349 for (L2GameServerPacket packet : packets)
5350- playable.sendPacket(packet);
5351+ player.sendPacket(packet);
5352 }
5353 }
5354 }
5355Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminChangeAccessLevel.java
5356===================================================================
5357--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminChangeAccessLevel.java (révision 553)
5358+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminChangeAccessLevel.java (révision 568)
5359@@ -19,7 +19,7 @@
5360
5361 import net.sf.l2j.L2DatabaseFactory;
5362 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5363-import net.sf.l2j.gameserver.model.L2World;
5364+import net.sf.l2j.gameserver.model.World;
5365 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5366 import net.sf.l2j.gameserver.network.SystemMessageId;
5367
5368@@ -56,7 +56,7 @@
5369 {
5370 String name = parts[1];
5371 int lvl = Integer.parseInt(parts[2]);
5372- L2PcInstance player = L2World.getInstance().getPlayer(name);
5373+ L2PcInstance player = World.getInstance().getPlayer(name);
5374 if (player != null)
5375 onLineChange(activeChar, player, lvl);
5376 else
5377Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKick.java
5378===================================================================
5379--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKick.java (révision 553)
5380+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKick.java (révision 568)
5381@@ -18,7 +18,7 @@
5382
5383 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5384 import net.sf.l2j.gameserver.model.L2Object;
5385-import net.sf.l2j.gameserver.model.L2World;
5386+import net.sf.l2j.gameserver.model.World;
5387 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5388
5389 public class AdminKick implements IAdminCommandHandler
5390@@ -43,7 +43,7 @@
5391 {
5392 st.nextToken();
5393 String player = st.nextToken();
5394- L2PcInstance plyr = L2World.getInstance().getPlayer(player);
5395+ L2PcInstance plyr = World.getInstance().getPlayer(player);
5396 if (plyr != null)
5397 {
5398 plyr.logout();
5399@@ -56,7 +56,7 @@
5400 {
5401 int counter = 0;
5402
5403- for (L2PcInstance player : L2World.getInstance().getPlayers())
5404+ for (L2PcInstance player : World.getInstance().getPlayers())
5405 {
5406 if (player.isGM())
5407 continue;
5408Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKnownlist.java
5409===================================================================
5410--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKnownlist.java (révision 553)
5411+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminKnownlist.java (révision 568)
5412@@ -21,7 +21,7 @@
5413
5414 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5415 import net.sf.l2j.gameserver.model.L2Object;
5416-import net.sf.l2j.gameserver.model.L2World;
5417+import net.sf.l2j.gameserver.model.World;
5418 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5419 import net.sf.l2j.gameserver.model.actor.knownlist.ObjectKnownList;
5420 import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
5421@@ -55,11 +55,11 @@
5422 try
5423 {
5424 final int objectId = Integer.parseInt(parameter);
5425- target = L2World.getInstance().getObject(objectId);
5426+ target = World.getInstance().getObject(objectId);
5427 }
5428 catch (NumberFormatException nfe)
5429 {
5430- target = L2World.getInstance().getPlayer(parameter);
5431+ target = World.getInstance().getPlayer(parameter);
5432 }
5433 }
5434
5435Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java
5436===================================================================
5437--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java (révision 553)
5438+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminZone.java (révision 568)
5439@@ -21,7 +21,7 @@
5440 import net.sf.l2j.gameserver.datatables.MapRegionTable;
5441 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5442 import net.sf.l2j.gameserver.instancemanager.ZoneManager;
5443-import net.sf.l2j.gameserver.model.L2World;
5444+import net.sf.l2j.gameserver.model.World;
5445 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5446 import net.sf.l2j.gameserver.model.zone.L2ZoneType;
5447 import net.sf.l2j.gameserver.model.zone.ZoneId;
5448@@ -82,8 +82,8 @@
5449 {
5450 int x = activeChar.getX();
5451 int y = activeChar.getY();
5452- int rx = (x - L2World.WORLD_X_MIN) / L2World.TILE_SIZE + L2World.TILE_X_MIN;
5453- int ry = (y - L2World.WORLD_Y_MIN) / L2World.TILE_SIZE + L2World.TILE_Y_MIN;
5454+ int rx = (x - World.WORLD_X_MIN) / World.TILE_SIZE + World.TILE_X_MIN;
5455+ int ry = (y - World.WORLD_Y_MIN) / World.TILE_SIZE + World.TILE_Y_MIN;
5456
5457 final NpcHtmlMessage html = new NpcHtmlMessage(0);
5458 html.setFile("data/html/admin/zone.htm");
5459@@ -113,7 +113,7 @@
5460 html.replace("%NORESTART%", (activeChar.isInsideZone(ZoneId.NO_RESTART) ? "<font color=\"LEVEL\">YES</font>" : "NO"));
5461
5462 final StringBuilder sb = new StringBuilder(100);
5463- for (L2ZoneType zone : L2World.getInstance().getRegion(x, y).getZones())
5464+ for (L2ZoneType zone : World.getInstance().getRegion(x, y).getZones())
5465 {
5466 if (zone.isCharacterInZone(activeChar))
5467 StringUtil.append(sb, zone.getId(), " ");
5468Index: GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectFear.java
5469===================================================================
5470--- GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectFear.java (révision 553)
5471+++ GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectFear.java (révision 568)
5472@@ -101,6 +101,12 @@
5473 }
5474
5475 @Override
5476+ public boolean onSameEffect(L2Effect effect)
5477+ {
5478+ return false;
5479+ }
5480+
5481+ @Override
5482 public int getEffectFlags()
5483 {
5484 return L2EffectFlag.FEAR.getMask();
5485Index: GameServer/java/net/sf/l2j/gameserver/scripting/scripts/village_master/SecondClassChange.java
5486===================================================================
5487--- GameServer/java/net/sf/l2j/gameserver/scripting/scripts/village_master/SecondClassChange.java (révision 553)
5488+++ GameServer/java/net/sf/l2j/gameserver/scripting/scripts/village_master/SecondClassChange.java (révision 568)
5489@@ -90,8 +90,8 @@
5490 });
5491 Classes.put("SE", new int[]
5492 {
5493+ 43,
5494 42,
5495- 43,
5496 2,
5497 34,
5498 35,
5499Index: GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/MailBBSManager.java
5500===================================================================
5501--- GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/MailBBSManager.java (révision 553)
5502+++ GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/MailBBSManager.java (révision 568)
5503@@ -32,7 +32,7 @@
5504 import net.sf.l2j.gameserver.cache.HtmCache;
5505 import net.sf.l2j.gameserver.datatables.CharNameTable;
5506 import net.sf.l2j.gameserver.model.BlockList;
5507-import net.sf.l2j.gameserver.model.L2World;
5508+import net.sf.l2j.gameserver.model.World;
5509 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5510 import net.sf.l2j.gameserver.network.SystemMessageId;
5511 import net.sf.l2j.gameserver.network.serverpackets.ExMailArrived;
5512@@ -521,7 +521,7 @@
5513 continue;
5514 }
5515
5516- final L2PcInstance recipientPlayer = L2World.getInstance().getPlayer(recipientId);
5517+ final L2PcInstance recipientPlayer = World.getInstance().getPlayer(recipientId);
5518
5519 if (!activeChar.isGM())
5520 {
5521@@ -656,7 +656,7 @@
5522
5523 private static boolean isBlocked(L2PcInstance activeChar, int recipId)
5524 {
5525- for (L2PcInstance player : L2World.getInstance().getPlayers())
5526+ for (L2PcInstance player : World.getInstance().getPlayers())
5527 {
5528 if (player.getObjectId() == recipId)
5529 {
5530Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminTeleport.java
5531===================================================================
5532--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminTeleport.java (révision 553)
5533+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminTeleport.java (révision 568)
5534@@ -22,7 +22,7 @@
5535 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5536 import net.sf.l2j.gameserver.model.L2Clan;
5537 import net.sf.l2j.gameserver.model.L2Object;
5538-import net.sf.l2j.gameserver.model.L2World;
5539+import net.sf.l2j.gameserver.model.World;
5540 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5541 import net.sf.l2j.gameserver.network.SystemMessageId;
5542
5543@@ -71,7 +71,7 @@
5544 {
5545 st.nextToken();
5546 String plyr = st.nextToken();
5547- L2PcInstance player = L2World.getInstance().getPlayer(plyr);
5548+ L2PcInstance player = World.getInstance().getPlayer(plyr);
5549 if (player == null)
5550 {
5551 activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
5552@@ -86,7 +86,7 @@
5553 try
5554 {
5555 String targetName = command.substring(13);
5556- L2PcInstance player = L2World.getInstance().getPlayer(targetName);
5557+ L2PcInstance player = World.getInstance().getPlayer(targetName);
5558 if (player == null)
5559 {
5560 activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
5561@@ -104,7 +104,7 @@
5562 try
5563 {
5564 String targetName = command.substring(19);
5565- L2PcInstance player = L2World.getInstance().getPlayer(targetName);
5566+ L2PcInstance player = World.getInstance().getPlayer(targetName);
5567 if (player == null)
5568 {
5569 activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
5570@@ -133,7 +133,7 @@
5571 try
5572 {
5573 String targetName = command.substring(18);
5574- L2PcInstance player = L2World.getInstance().getPlayer(targetName);
5575+ L2PcInstance player = World.getInstance().getPlayer(targetName);
5576 if (player == null)
5577 {
5578 activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
5579@@ -178,7 +178,7 @@
5580 {
5581 st.nextToken();
5582 String plyr = st.nextToken();
5583- L2PcInstance player = L2World.getInstance().getPlayer(plyr);
5584+ L2PcInstance player = World.getInstance().getPlayer(plyr);
5585 if (player == null)
5586 {
5587 activeChar.sendPacket(SystemMessageId.INCORRECT_TARGET);
5588Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEffects.java
5589===================================================================
5590--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEffects.java (révision 553)
5591+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEffects.java (révision 568)
5592@@ -19,7 +19,7 @@
5593 import net.sf.l2j.gameserver.datatables.SkillTable;
5594 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5595 import net.sf.l2j.gameserver.model.L2Object;
5596-import net.sf.l2j.gameserver.model.L2World;
5597+import net.sf.l2j.gameserver.model.World;
5598 import net.sf.l2j.gameserver.model.actor.L2Character;
5599 import net.sf.l2j.gameserver.model.actor.L2Npc;
5600 import net.sf.l2j.gameserver.model.actor.L2Summon;
5601@@ -269,13 +269,13 @@
5602 }
5603
5604 if (player instanceof L2PcInstance)
5605- L2World.getInstance().removePlayer((L2PcInstance) player);
5606+ World.getInstance().removePlayer((L2PcInstance) player);
5607
5608 player.setName(name);
5609
5610 if (player instanceof L2PcInstance)
5611 {
5612- L2World.getInstance().addVisibleObject(player, null);
5613+ World.getInstance().addVisibleObject(player, null);
5614 ((L2PcInstance) player).broadcastUserInfo();
5615 }
5616 else if (player instanceof L2Npc)
5617@@ -298,7 +298,7 @@
5618 final String targetOrRadius = st.nextToken();
5619 if (targetOrRadius != null)
5620 {
5621- L2PcInstance player = L2World.getInstance().getPlayer(targetOrRadius);
5622+ L2PcInstance player = World.getInstance().getPlayer(targetOrRadius);
5623 if (player != null)
5624 {
5625 if (performSocial(social, player))
5626@@ -347,7 +347,7 @@
5627 final String targetOrRadius = st.nextToken();
5628 if (targetOrRadius != null)
5629 {
5630- L2PcInstance player = L2World.getInstance().getPlayer(targetOrRadius);
5631+ L2PcInstance player = World.getInstance().getPlayer(targetOrRadius);
5632 if (player != null)
5633 {
5634 if (performAbnormal(abnormal, player))
5635Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java
5636===================================================================
5637--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (révision 553)
5638+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAdmin.java (révision 568)
5639@@ -35,7 +35,7 @@
5640 import net.sf.l2j.gameserver.instancemanager.CursedWeaponsManager;
5641 import net.sf.l2j.gameserver.instancemanager.ZoneManager;
5642 import net.sf.l2j.gameserver.model.L2Object;
5643-import net.sf.l2j.gameserver.model.L2World;
5644+import net.sf.l2j.gameserver.model.World;
5645 import net.sf.l2j.gameserver.model.actor.L2Character;
5646 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5647 import net.sf.l2j.gameserver.network.SystemMessageId;
5648@@ -97,7 +97,7 @@
5649 }
5650
5651 String firstParam = st.nextToken();
5652- L2PcInstance player = L2World.getInstance().getPlayer(firstParam);
5653+ L2PcInstance player = World.getInstance().getPlayer(firstParam);
5654 if (player != null)
5655 {
5656 if (st.hasMoreTokens())
5657Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminHeal.java
5658===================================================================
5659--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminHeal.java (révision 553)
5660+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminHeal.java (révision 568)
5661@@ -19,7 +19,7 @@
5662 import net.sf.l2j.Config;
5663 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5664 import net.sf.l2j.gameserver.model.L2Object;
5665-import net.sf.l2j.gameserver.model.L2World;
5666+import net.sf.l2j.gameserver.model.World;
5667 import net.sf.l2j.gameserver.model.actor.L2Character;
5668 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5669 import net.sf.l2j.gameserver.network.SystemMessageId;
5670@@ -73,7 +73,7 @@
5671 L2Object obj = activeChar.getTarget();
5672 if (player != null)
5673 {
5674- L2PcInstance plyr = L2World.getInstance().getPlayer(player);
5675+ L2PcInstance plyr = World.getInstance().getPlayer(player);
5676
5677 if (plyr != null)
5678 obj = plyr;
5679Index: GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectHealOverTime.java
5680===================================================================
5681--- GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectHealOverTime.java (révision 553)
5682+++ GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectHealOverTime.java (révision 568)
5683@@ -16,6 +16,8 @@
5684
5685 import net.sf.l2j.gameserver.model.L2Effect;
5686 import net.sf.l2j.gameserver.model.actor.instance.L2DoorInstance;
5687+import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5688+import net.sf.l2j.gameserver.network.serverpackets.ExRegenMax;
5689 import net.sf.l2j.gameserver.network.serverpackets.StatusUpdate;
5690 import net.sf.l2j.gameserver.skills.Env;
5691 import net.sf.l2j.gameserver.templates.skills.L2EffectType;
5692@@ -34,25 +36,37 @@
5693 }
5694
5695 @Override
5696+ public boolean onStart()
5697+ {
5698+ // If effected is a player, send a hp regen effect packet.
5699+ if (getEffected() instanceof L2PcInstance && getTotalCount() > 0 && getPeriod() > 0)
5700+ getEffected().sendPacket(new ExRegenMax(getTotalCount() * getPeriod(), getPeriod(), calc()));
5701+
5702+ return true;
5703+ }
5704+
5705+ @Override
5706 public boolean onActionTime()
5707 {
5708- if (getEffected().isDead())
5709+ // Doesn't affect doors and dead characters.
5710+ if (getEffected().isDead() || getEffected() instanceof L2DoorInstance)
5711 return false;
5712
5713- if (getEffected() instanceof L2DoorInstance)
5714- return false;
5715+ // Retrieve maximum hp.
5716+ final double maxHp = getEffected().getMaxHp();
5717
5718- double hp = getEffected().getCurrentHp();
5719- double maxhp = getEffected().getMaxHp();
5720- hp += calc();
5721- if (hp > maxhp)
5722- {
5723- hp = maxhp;
5724- }
5725- getEffected().setCurrentHp(hp);
5726- StatusUpdate suhp = new StatusUpdate(getEffected());
5727- suhp.addAttribute(StatusUpdate.CUR_HP, (int) hp);
5728- getEffected().sendPacket(suhp);
5729+ // Calculate new hp amount. If higher than max, pick max.
5730+ double newHp = getEffected().getCurrentHp() + calc();
5731+ if (newHp > maxHp)
5732+ newHp = maxHp;
5733+
5734+ // Set hp amount.
5735+ getEffected().setCurrentHp(newHp);
5736+
5737+ // Send status update.
5738+ final StatusUpdate su = new StatusUpdate(getEffected());
5739+ su.addAttribute(StatusUpdate.CUR_HP, (int) newHp);
5740+ getEffected().sendPacket(su);
5741 return true;
5742 }
5743-}
5744+}
5745\ No newline at end of file
5746Index: GameServer/java/net/sf/l2j/gameserver/scripting/tasks/Recommendation.java
5747===================================================================
5748--- GameServer/java/net/sf/l2j/gameserver/scripting/tasks/Recommendation.java (révision 553)
5749+++ GameServer/java/net/sf/l2j/gameserver/scripting/tasks/Recommendation.java (révision 568)
5750@@ -14,7 +14,7 @@
5751 */
5752 package net.sf.l2j.gameserver.scripting.tasks;
5753
5754-import net.sf.l2j.gameserver.model.L2World;
5755+import net.sf.l2j.gameserver.model.World;
5756 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5757 import net.sf.l2j.gameserver.network.serverpackets.UserInfo;
5758 import net.sf.l2j.gameserver.scripting.ScheduledQuest;
5759@@ -32,7 +32,7 @@
5760 @Override
5761 public final void onStart()
5762 {
5763- for (L2PcInstance player : L2World.getInstance().getPlayers())
5764+ for (L2PcInstance player : World.getInstance().getPlayers())
5765 {
5766 player.restartRecom();
5767 player.sendPacket(new UserInfo(player));
5768Index: GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/FriendsBBSManager.java
5769===================================================================
5770--- GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/FriendsBBSManager.java (révision 553)
5771+++ GameServer/java/net/sf/l2j/gameserver/communitybbs/Manager/FriendsBBSManager.java (révision 568)
5772@@ -27,7 +27,7 @@
5773 import net.sf.l2j.gameserver.cache.HtmCache;
5774 import net.sf.l2j.gameserver.datatables.CharNameTable;
5775 import net.sf.l2j.gameserver.model.BlockList;
5776-import net.sf.l2j.gameserver.model.L2World;
5777+import net.sf.l2j.gameserver.model.World;
5778 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5779 import net.sf.l2j.gameserver.network.SystemMessageId;
5780 import net.sf.l2j.gameserver.network.serverpackets.FriendList;
5781@@ -87,7 +87,7 @@
5782
5783 for (int friendId : activeChar.getFriendList())
5784 {
5785- L2PcInstance player = L2World.getInstance().getPlayer(friendId);
5786+ L2PcInstance player = World.getInstance().getPlayer(friendId);
5787 if (player != null)
5788 {
5789 player.getFriendList().remove(Integer.valueOf(activeChar.getObjectId()));
5790@@ -122,7 +122,7 @@
5791
5792 String name = CharNameTable.getInstance().getPlayerName(friendId);
5793
5794- L2PcInstance player = L2World.getInstance().getPlayer(friendId);
5795+ L2PcInstance player = World.getInstance().getPlayer(friendId);
5796 if (player != null)
5797 {
5798 player.getFriendList().remove(Integer.valueOf(activeChar.getObjectId()));
5799@@ -227,7 +227,7 @@
5800 if (friendName == null)
5801 continue;
5802
5803- final L2PcInstance friend = L2World.getInstance().getPlayer(id);
5804+ final L2PcInstance friend = World.getInstance().getPlayer(id);
5805 StringUtil.append(sb, "<a action=\"bypass _friend;select;", id, "\">[Select]</a> ", friendName, " ", ((friend != null && friend.isOnline()) ? "(on)" : "(off)"), "<br1>");
5806 }
5807 content = content.replaceAll("%friendslist%", sb.toString());
5808@@ -242,7 +242,7 @@
5809 if (friendName == null)
5810 continue;
5811
5812- final L2PcInstance friend = L2World.getInstance().getPlayer(id);
5813+ final L2PcInstance friend = World.getInstance().getPlayer(id);
5814 StringUtil.append(sb, "<a action=\"bypass _friend;deselect;", id, "\">[Deselect]</a> ", friendName, " ", ((friend != null && friend.isOnline()) ? "(on)" : "(off)"), "<br1>");
5815 }
5816 content = content.replaceAll("%selectedFriendsList%", sb.toString());
5817@@ -275,7 +275,7 @@
5818 if (blockName == null)
5819 continue;
5820
5821- final L2PcInstance block = L2World.getInstance().getPlayer(id);
5822+ final L2PcInstance block = World.getInstance().getPlayer(id);
5823 StringUtil.append(sb, "<a action=\"bypass _block;select;", id, "\">[Select]</a> ", blockName, " ", ((block != null && block.isOnline()) ? "(on)" : "(off)"), "<br1>");
5824 }
5825 content = content.replaceAll("%blocklist%", sb.toString());
5826@@ -290,7 +290,7 @@
5827 if (blockName == null)
5828 continue;
5829
5830- final L2PcInstance block = L2World.getInstance().getPlayer(id);
5831+ final L2PcInstance block = World.getInstance().getPlayer(id);
5832 StringUtil.append(sb, "<a action=\"bypass _block;deselect;", id, "\">[Deselect]</a> ", blockName, " ", ((block != null && block.isOnline()) ? "(on)" : "(off)"), "<br1>");
5833 }
5834 content = content.replaceAll("%selectedBlocksList%", sb.toString());
5835Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminRes.java
5836===================================================================
5837--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminRes.java (révision 553)
5838+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminRes.java (révision 568)
5839@@ -19,7 +19,7 @@
5840 import net.sf.l2j.Config;
5841 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5842 import net.sf.l2j.gameserver.model.L2Object;
5843-import net.sf.l2j.gameserver.model.L2World;
5844+import net.sf.l2j.gameserver.model.World;
5845 import net.sf.l2j.gameserver.model.actor.L2Character;
5846 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5847 import net.sf.l2j.gameserver.network.SystemMessageId;
5848@@ -72,7 +72,7 @@
5849 if (resParam != null)
5850 {
5851 // Check if a player name was specified as a param.
5852- L2PcInstance plyr = L2World.getInstance().getPlayer(resParam);
5853+ L2PcInstance plyr = World.getInstance().getPlayer(resParam);
5854
5855 if (plyr != null)
5856 obj = plyr;
5857Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBuffs.java
5858===================================================================
5859--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBuffs.java (révision 553)
5860+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBuffs.java (révision 568)
5861@@ -7,7 +7,7 @@
5862 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
5863 import net.sf.l2j.gameserver.model.L2Effect;
5864 import net.sf.l2j.gameserver.model.L2Object;
5865-import net.sf.l2j.gameserver.model.L2World;
5866+import net.sf.l2j.gameserver.model.World;
5867 import net.sf.l2j.gameserver.model.actor.L2Character;
5868 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5869 import net.sf.l2j.gameserver.network.SystemMessageId;
5870@@ -38,7 +38,7 @@
5871 if (st.hasMoreTokens())
5872 {
5873 String playername = st.nextToken();
5874- L2PcInstance player = L2World.getInstance().getPlayer(playername);
5875+ L2PcInstance player = World.getInstance().getPlayer(playername);
5876 if (player == null)
5877 {
5878 activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
5879@@ -134,7 +134,7 @@
5880 {
5881 final String name = st.nextToken();
5882
5883- player = L2World.getInstance().getPlayer(name);
5884+ player = World.getInstance().getPlayer(name);
5885 if (player == null)
5886 {
5887 activeChar.sendMessage("The player " + name + " is not online.");
5888@@ -211,7 +211,7 @@
5889 if (skillId < 1)
5890 return;
5891
5892- final L2Object obj = L2World.getInstance().getObject(objId);
5893+ final L2Object obj = World.getInstance().getObject(objId);
5894 if (obj instanceof L2Character)
5895 {
5896 final L2Character target = (L2Character) obj;
5897@@ -230,7 +230,7 @@
5898
5899 private static void removeAllBuffs(L2PcInstance activeChar, int objId)
5900 {
5901- final L2Object target = L2World.getInstance().getObject(objId);
5902+ final L2Object target = World.getInstance().getObject(objId);
5903 if (target instanceof L2Character)
5904 {
5905 ((L2Character) target).stopAllEffects();
5906Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java
5907===================================================================
5908--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java (révision 553)
5909+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminEditChar.java (révision 568)
5910@@ -35,7 +35,7 @@
5911 import net.sf.l2j.gameserver.instancemanager.ClanHallManager;
5912 import net.sf.l2j.gameserver.model.L2Clan;
5913 import net.sf.l2j.gameserver.model.L2Object;
5914-import net.sf.l2j.gameserver.model.L2World;
5915+import net.sf.l2j.gameserver.model.World;
5916 import net.sf.l2j.gameserver.model.actor.L2Summon;
5917 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
5918 import net.sf.l2j.gameserver.model.actor.instance.L2PetInstance;
5919@@ -91,7 +91,7 @@
5920 {
5921 try
5922 {
5923- final L2PcInstance target = L2World.getInstance().getPlayer(command.substring(21));
5924+ final L2PcInstance target = World.getInstance().getPlayer(command.substring(21));
5925 if (target != null)
5926 showCharacterInfo(activeChar, target);
5927 else
5928@@ -430,7 +430,7 @@
5929 L2Object target;
5930 try
5931 {
5932- target = L2World.getInstance().getPet(Integer.parseInt(command.substring(19)));
5933+ target = World.getInstance().getPet(Integer.parseInt(command.substring(19)));
5934 }
5935 catch (Exception e)
5936 {
5937@@ -459,7 +459,7 @@
5938 L2Object target;
5939 try
5940 {
5941- target = L2World.getInstance().getPlayer(command.substring(17));
5942+ target = World.getInstance().getPlayer(command.substring(17));
5943 if (target == null)
5944 target = activeChar.getTarget();
5945 }
5946@@ -482,7 +482,7 @@
5947 {
5948 try
5949 {
5950- final L2PcInstance player = L2World.getInstance().getPlayer(command.substring(16));
5951+ final L2PcInstance player = World.getInstance().getPlayer(command.substring(16));
5952 if (player == null)
5953 {
5954 activeChar.sendPacket(SystemMessageId.TARGET_CANT_FOUND);
5955@@ -529,7 +529,7 @@
5956 boolean changeCreateExpiryTime = st.nextToken().equalsIgnoreCase("create");
5957 String playerName = st.nextToken();
5958
5959- L2PcInstance player = L2World.getInstance().getPlayer(playerName);
5960+ L2PcInstance player = World.getInstance().getPlayer(playerName);
5961 if (player == null)
5962 {
5963 try (Connection con = L2DatabaseFactory.getInstance().getConnection())
5964@@ -561,7 +561,7 @@
5965
5966 private static void listCharacters(L2PcInstance activeChar, int page)
5967 {
5968- List<L2PcInstance> players = new ArrayList<>(L2World.getInstance().getPlayers());
5969+ List<L2PcInstance> players = new ArrayList<>(World.getInstance().getPlayers());
5970
5971 final int max = MathUtil.countPagesNumber(players.size(), PAGE_LIMIT);
5972
5973@@ -708,7 +708,7 @@
5974 final StringBuilder sb = new StringBuilder();
5975
5976 // First use of sb, add player info into new Table row
5977- for (L2PcInstance player : L2World.getInstance().getPlayers())
5978+ for (L2PcInstance player : World.getInstance().getPlayers())
5979 {
5980 String name = player.getName();
5981 if (name.toLowerCase().contains(characterToFind.toLowerCase()))
5982@@ -767,7 +767,7 @@
5983 html.setFile("data/html/admin/ipfind.htm");
5984
5985 final StringBuilder sb = new StringBuilder(1000);
5986- for (L2PcInstance player : L2World.getInstance().getPlayers())
5987+ for (L2PcInstance player : World.getInstance().getPlayers())
5988 {
5989 L2GameClient client = player.getClient();
5990 if (client.isDetached())
5991@@ -827,7 +827,7 @@
5992 return;
5993 }
5994
5995- final L2PcInstance player = L2World.getInstance().getPlayer(characterName);
5996+ final L2PcInstance player = World.getInstance().getPlayer(characterName);
5997 if (player == null)
5998 {
5999 activeChar.sendPacket(SystemMessageId.TARGET_CANT_FOUND);
6000@@ -854,7 +854,7 @@
6001
6002 final Map<String, Integer> dualboxIPs = new HashMap<>();
6003
6004- for (L2PcInstance player : L2World.getInstance().getPlayers())
6005+ for (L2PcInstance player : World.getInstance().getPlayers())
6006 {
6007 L2GameClient client = player.getClient();
6008 if (client == null || client.isDetached())
6009Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMenu.java
6010===================================================================
6011--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMenu.java (révision 553)
6012+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMenu.java (révision 568)
6013@@ -15,7 +15,7 @@
6014 package net.sf.l2j.gameserver.handler.admincommandhandlers;
6015
6016 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
6017-import net.sf.l2j.gameserver.model.L2World;
6018+import net.sf.l2j.gameserver.model.World;
6019 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6020
6021 public class AdminMenu implements IAdminCommandHandler
6022@@ -37,7 +37,7 @@
6023 if (data.length == 5)
6024 {
6025 String playerName = data[1];
6026- L2PcInstance player = L2World.getInstance().getPlayer(playerName);
6027+ L2PcInstance player = World.getInstance().getPlayer(playerName);
6028 if (player != null)
6029 teleportCharacter(player, Integer.parseInt(data[2]), Integer.parseInt(data[3]), Integer.parseInt(data[4]), activeChar);
6030 }
6031Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java
6032===================================================================
6033--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java (révision 553)
6034+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminMaintenance.java (révision 568)
6035@@ -18,7 +18,7 @@
6036 import net.sf.l2j.gameserver.LoginServerThread;
6037 import net.sf.l2j.gameserver.Shutdown;
6038 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
6039-import net.sf.l2j.gameserver.model.L2World;
6040+import net.sf.l2j.gameserver.model.World;
6041 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6042 import net.sf.l2j.gameserver.network.serverpackets.NpcHtmlMessage;
6043 import net.sf.l2j.gameserver.taskmanager.GameTimeTaskManager;
6044@@ -108,7 +108,7 @@
6045 {
6046 final NpcHtmlMessage html = new NpcHtmlMessage(0);
6047 html.setFile("data/html/admin/maintenance.htm");
6048- html.replace("%count%", L2World.getInstance().getPlayers().size());
6049+ html.replace("%count%", World.getInstance().getPlayers().size());
6050 html.replace("%used%", Math.round((int) ((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1048576)));
6051 html.replace("%server_name%", LoginServerThread.getInstance().getServerName());
6052 html.replace("%status%", LoginServerThread.getInstance().getStatusString());
6053Index: GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectRoot.java
6054===================================================================
6055--- GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectRoot.java (révision 553)
6056+++ GameServer/java/net/sf/l2j/gameserver/skills/effects/EffectRoot.java (révision 568)
6057@@ -55,6 +55,12 @@
6058 }
6059
6060 @Override
6061+ public boolean onSameEffect(L2Effect effect)
6062+ {
6063+ return false;
6064+ }
6065+
6066+ @Override
6067 public int getEffectFlags()
6068 {
6069 return L2EffectFlag.ROOTED.getMask();
6070Index: GameServer/java/net/sf/l2j/gameserver/scripting/quests/SagasScripts/SagasSuperClass.java
6071===================================================================
6072--- GameServer/java/net/sf/l2j/gameserver/scripting/quests/SagasScripts/SagasSuperClass.java (révision 553)
6073+++ GameServer/java/net/sf/l2j/gameserver/scripting/quests/SagasScripts/SagasSuperClass.java (révision 568)
6074@@ -26,7 +26,7 @@
6075 import net.sf.l2j.gameserver.model.L2Object;
6076 import net.sf.l2j.gameserver.model.L2Party;
6077 import net.sf.l2j.gameserver.model.L2Skill;
6078-import net.sf.l2j.gameserver.model.L2World;
6079+import net.sf.l2j.gameserver.model.World;
6080 import net.sf.l2j.gameserver.model.actor.L2Attackable;
6081 import net.sf.l2j.gameserver.model.actor.L2Character;
6082 import net.sf.l2j.gameserver.model.actor.L2Npc;
6083@@ -183,7 +183,7 @@
6084 {
6085 if (_SpawnList.containsKey(npc))
6086 {
6087- final L2PcInstance player = L2World.getInstance().getPlayer(_SpawnList.get(npc));
6088+ final L2PcInstance player = World.getInstance().getPlayer(_SpawnList.get(npc));
6089 if (player != null)
6090 return player.getQuestState(getName());
6091 }
6092@@ -480,7 +480,7 @@
6093 else if (event.equalsIgnoreCase("Mob_3 Timer 1"))
6094 {
6095 // Search the NPC.
6096- L2Npc Mob_2 = (L2Npc) L2World.getInstance().getObject(st.getInt("Mob_2"));
6097+ L2Npc Mob_2 = (L2Npc) World.getInstance().getObject(st.getInt("Mob_2"));
6098 if (Mob_2 == null)
6099 return null;
6100
6101@@ -820,7 +820,7 @@
6102 {
6103 if (_SpawnList.containsKey(npc) && _SpawnList.get(npc) != player.getObjectId())
6104 {
6105- L2PcInstance quest_player = L2World.getInstance().getPlayer(_SpawnList.get(npc));
6106+ L2PcInstance quest_player = World.getInstance().getPlayer(_SpawnList.get(npc));
6107 if (quest_player == null)
6108 return null;
6109
6110Index: GameServer/java/net/sf/l2j/gameserver/LoginServerThread.java
6111===================================================================
6112--- GameServer/java/net/sf/l2j/gameserver/LoginServerThread.java (révision 553)
6113+++ GameServer/java/net/sf/l2j/gameserver/LoginServerThread.java (révision 568)
6114@@ -38,7 +38,7 @@
6115 import net.sf.l2j.commons.random.Rnd;
6116
6117 import net.sf.l2j.Config;
6118-import net.sf.l2j.gameserver.model.L2World;
6119+import net.sf.l2j.gameserver.model.World;
6120 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6121 import net.sf.l2j.gameserver.network.L2GameClient;
6122 import net.sf.l2j.gameserver.network.L2GameClient.GameClientState;
6123@@ -271,7 +271,7 @@
6124
6125 sendPacket(st);
6126
6127- final Collection<L2PcInstance> players = L2World.getInstance().getPlayers();
6128+ final Collection<L2PcInstance> players = World.getInstance().getPlayers();
6129 if (!players.isEmpty())
6130 {
6131 final List<String> playerList = new ArrayList<>();
6132Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSpawn.java
6133===================================================================
6134--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSpawn.java (révision 553)
6135+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminSpawn.java (révision 568)
6136@@ -32,7 +32,7 @@
6137 import net.sf.l2j.gameserver.instancemanager.SevenSigns;
6138 import net.sf.l2j.gameserver.model.L2Object;
6139 import net.sf.l2j.gameserver.model.L2Spawn;
6140-import net.sf.l2j.gameserver.model.L2World;
6141+import net.sf.l2j.gameserver.model.World;
6142 import net.sf.l2j.gameserver.model.actor.L2Npc;
6143 import net.sf.l2j.gameserver.model.actor.instance.L2FenceInstance;
6144 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6145@@ -198,7 +198,7 @@
6146 Broadcast.toAllOnlinePlayers(SystemMessage.getSystemMessage(SystemMessageId.NPC_SERVER_NOT_OPERATING));
6147 RaidBossSpawnManager.getInstance().cleanUp();
6148 DayNightSpawnManager.getInstance().cleanUp();
6149- L2World.getInstance().deleteVisibleNpcSpawns();
6150+ World.getInstance().deleteVisibleNpcSpawns();
6151 GmListTable.broadcastMessageToGMs("NPCs' unspawn is now complete.");
6152 }
6153 else if (command.startsWith("admin_spawnday"))
6154@@ -210,7 +210,7 @@
6155 // make sure all spawns are deleted
6156 RaidBossSpawnManager.getInstance().cleanUp();
6157 DayNightSpawnManager.getInstance().cleanUp();
6158- L2World.getInstance().deleteVisibleNpcSpawns();
6159+ World.getInstance().deleteVisibleNpcSpawns();
6160 // now respawn all
6161 NpcTable.getInstance().reloadAllNpc();
6162 SpawnTable.getInstance().reloadAll();
6163@@ -246,7 +246,7 @@
6164 st.nextToken();
6165 try
6166 {
6167- L2Object object = L2World.getInstance().getObject(Integer.parseInt(st.nextToken()));
6168+ L2Object object = World.getInstance().getObject(Integer.parseInt(st.nextToken()));
6169 if (object instanceof L2FenceInstance)
6170 {
6171 FenceTable.getInstance().removeFence((L2FenceInstance) object);
6172Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBan.java
6173===================================================================
6174--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBan.java (révision 553)
6175+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminBan.java (révision 568)
6176@@ -23,7 +23,7 @@
6177 import net.sf.l2j.L2DatabaseFactory;
6178 import net.sf.l2j.gameserver.LoginServerThread;
6179 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
6180-import net.sf.l2j.gameserver.model.L2World;
6181+import net.sf.l2j.gameserver.model.World;
6182 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6183 import net.sf.l2j.gameserver.network.SystemMessageId;
6184
6185@@ -71,7 +71,7 @@
6186 if (st.hasMoreTokens())
6187 {
6188 player = st.nextToken();
6189- targetPlayer = L2World.getInstance().getPlayer(player);
6190+ targetPlayer = World.getInstance().getPlayer(player);
6191
6192 // Second parameter, duration
6193 if (st.hasMoreTokens())
6194Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminCreateItem.java
6195===================================================================
6196--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminCreateItem.java (révision 553)
6197+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminCreateItem.java (révision 568)
6198@@ -20,7 +20,7 @@
6199 import net.sf.l2j.gameserver.datatables.ArmorSetsTable;
6200 import net.sf.l2j.gameserver.datatables.ItemTable;
6201 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
6202-import net.sf.l2j.gameserver.model.L2World;
6203+import net.sf.l2j.gameserver.model.World;
6204 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6205 import net.sf.l2j.gameserver.model.item.ArmorSet;
6206 import net.sf.l2j.gameserver.model.item.kind.Item;
6207@@ -63,7 +63,7 @@
6208 final int id = Integer.parseInt(st.nextToken());
6209 final int count = (st.hasMoreTokens()) ? Integer.parseInt(st.nextToken()) : 1;
6210
6211- final Collection<L2PcInstance> players = L2World.getInstance().getPlayers();
6212+ final Collection<L2PcInstance> players = World.getInstance().getPlayers();
6213 for (L2PcInstance player : players)
6214 createItem(activeChar, player, id, count, 0, false);
6215
6216Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminGeoEngine.java
6217===================================================================
6218--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminGeoEngine.java (révision 553)
6219+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminGeoEngine.java (révision 568)
6220@@ -21,7 +21,7 @@
6221 import net.sf.l2j.gameserver.geoengine.geodata.GeoStructure;
6222 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
6223 import net.sf.l2j.gameserver.model.L2Object;
6224-import net.sf.l2j.gameserver.model.L2World;
6225+import net.sf.l2j.gameserver.model.World;
6226 import net.sf.l2j.gameserver.model.Location;
6227 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6228 import net.sf.l2j.gameserver.network.SystemMessageId;
6229@@ -72,8 +72,8 @@
6230 {
6231 final int geoX = GeoEngine.getGeoX(activeChar.getX());
6232 final int geoY = GeoEngine.getGeoY(activeChar.getY());
6233- final int rx = (activeChar.getX() - L2World.WORLD_X_MIN) / L2World.TILE_SIZE + L2World.TILE_X_MIN;
6234- final int ry = (activeChar.getY() - L2World.WORLD_Y_MIN) / L2World.TILE_SIZE + L2World.TILE_Y_MIN;
6235+ final int rx = (activeChar.getX() - World.WORLD_X_MIN) / World.TILE_SIZE + World.TILE_X_MIN;
6236+ final int ry = (activeChar.getY() - World.WORLD_Y_MIN) / World.TILE_SIZE + World.TILE_Y_MIN;
6237 final ABlock block = GeoEngine.getInstance().getBlock(geoX, geoY);
6238 activeChar.sendMessage("Region: " + rx + "_" + ry + "; Block: " + block.getClass().getSimpleName());
6239 if (block.hasGeoPos())
6240Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAnnouncements.java
6241===================================================================
6242--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAnnouncements.java (révision 553)
6243+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminAnnouncements.java (révision 568)
6244@@ -16,7 +16,7 @@
6245
6246 import net.sf.l2j.gameserver.datatables.AnnouncementTable;
6247 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
6248-import net.sf.l2j.gameserver.model.L2World;
6249+import net.sf.l2j.gameserver.model.World;
6250 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6251
6252 /**
6253@@ -53,7 +53,7 @@
6254 case "all":
6255 case "all_auto":
6256 final boolean isAuto = tokens[1].equalsIgnoreCase("all_auto");
6257- for (L2PcInstance player : L2World.getInstance().getPlayers())
6258+ for (L2PcInstance player : World.getInstance().getPlayers())
6259 AnnouncementTable.getInstance().showAnnouncements(player, isAuto);
6260
6261 AnnouncementTable.getInstance().listAnnouncements(activeChar);
6262Index: GameServer/java/net/sf/l2j/gameserver/handler/itemhandlers/SummonItems.java
6263===================================================================
6264--- GameServer/java/net/sf/l2j/gameserver/handler/itemhandlers/SummonItems.java (révision 553)
6265+++ GameServer/java/net/sf/l2j/gameserver/handler/itemhandlers/SummonItems.java (révision 568)
6266@@ -42,6 +42,7 @@
6267 import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
6268 import net.sf.l2j.gameserver.network.serverpackets.PetItemList;
6269 import net.sf.l2j.gameserver.network.serverpackets.SetupGauge;
6270+import net.sf.l2j.gameserver.network.serverpackets.SetupGauge.GaugeColor;
6271 import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
6272 import net.sf.l2j.gameserver.util.Broadcast;
6273
6274@@ -126,7 +127,7 @@
6275 activeChar.setTarget(activeChar);
6276 Broadcast.toSelfAndKnownPlayers(activeChar, new MagicSkillUse(activeChar, 2046, 1, 5000, 0));
6277 activeChar.setTarget(oldTarget);
6278- activeChar.sendPacket(new SetupGauge(0, 5000));
6279+ activeChar.sendPacket(new SetupGauge(GaugeColor.BLUE, 5000));
6280 activeChar.sendPacket(SystemMessageId.SUMMON_A_PET);
6281 activeChar.setIsCastingNow(true);
6282
6283Index: GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatTrade.java
6284===================================================================
6285--- GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatTrade.java (révision 553)
6286+++ GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatTrade.java (révision 568)
6287@@ -17,7 +17,7 @@
6288 import net.sf.l2j.gameserver.datatables.MapRegionTable;
6289 import net.sf.l2j.gameserver.handler.IChatHandler;
6290 import net.sf.l2j.gameserver.model.BlockList;
6291-import net.sf.l2j.gameserver.model.L2World;
6292+import net.sf.l2j.gameserver.model.World;
6293 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6294 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
6295 import net.sf.l2j.gameserver.util.FloodProtectors;
6296@@ -39,7 +39,7 @@
6297 final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
6298 final int region = MapRegionTable.getMapRegion(activeChar.getX(), activeChar.getY());
6299
6300- for (L2PcInstance player : L2World.getInstance().getPlayers())
6301+ for (L2PcInstance player : World.getInstance().getPlayers())
6302 {
6303 if (!BlockList.isBlocked(player, activeChar) && region == MapRegionTable.getMapRegion(player.getX(), player.getY()))
6304 player.sendPacket(cs);
6305Index: GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminTarget.java
6306===================================================================
6307--- GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminTarget.java (révision 553)
6308+++ GameServer/java/net/sf/l2j/gameserver/handler/admincommandhandlers/AdminTarget.java (révision 568)
6309@@ -15,7 +15,7 @@
6310 package net.sf.l2j.gameserver.handler.admincommandhandlers;
6311
6312 import net.sf.l2j.gameserver.handler.IAdminCommandHandler;
6313-import net.sf.l2j.gameserver.model.L2World;
6314+import net.sf.l2j.gameserver.model.World;
6315 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6316 import net.sf.l2j.gameserver.network.SystemMessageId;
6317
6318@@ -48,7 +48,7 @@
6319 try
6320 {
6321 String targetName = command.substring(13);
6322- L2PcInstance obj = L2World.getInstance().getPlayer(targetName);
6323+ L2PcInstance obj = World.getInstance().getPlayer(targetName);
6324
6325 if (obj != null)
6326 obj.onAction(activeChar);
6327Index: GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatHeroVoice.java
6328===================================================================
6329--- GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatHeroVoice.java (révision 553)
6330+++ GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatHeroVoice.java (révision 568)
6331@@ -15,7 +15,7 @@
6332 package net.sf.l2j.gameserver.handler.chathandlers;
6333
6334 import net.sf.l2j.gameserver.handler.IChatHandler;
6335-import net.sf.l2j.gameserver.model.L2World;
6336+import net.sf.l2j.gameserver.model.World;
6337 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6338 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
6339 import net.sf.l2j.gameserver.util.FloodProtectors;
6340@@ -38,7 +38,7 @@
6341 return;
6342
6343 final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
6344- for (L2PcInstance player : L2World.getInstance().getPlayers())
6345+ for (L2PcInstance player : World.getInstance().getPlayers())
6346 player.sendPacket(cs);
6347 }
6348
6349Index: GameServer/java/net/sf/l2j/Config.java
6350===================================================================
6351--- GameServer/java/net/sf/l2j/Config.java (révision 553)
6352+++ GameServer/java/net/sf/l2j/Config.java (révision 568)
6353@@ -371,10 +371,6 @@
6354 public static int MIN_MONSTER_ANIMATION;
6355 public static int MAX_MONSTER_ANIMATION;
6356
6357- public static boolean GRIDS_ALWAYS_ON;
6358- public static int GRID_NEIGHBOR_TURNON_TIME;
6359- public static int GRID_NEIGHBOR_TURNOFF_TIME;
6360-
6361 // --------------------------------------------------
6362 // Players
6363 // --------------------------------------------------
6364@@ -1075,10 +1071,6 @@
6365 MAX_NPC_ANIMATION = npcs.getProperty("MaxNPCAnimation", 40);
6366 MIN_MONSTER_ANIMATION = npcs.getProperty("MinMonsterAnimation", 10);
6367 MAX_MONSTER_ANIMATION = npcs.getProperty("MaxMonsterAnimation", 40);
6368-
6369- GRIDS_ALWAYS_ON = npcs.getProperty("GridsAlwaysOn", false);
6370- GRID_NEIGHBOR_TURNON_TIME = npcs.getProperty("GridNeighborTurnOnTime", 1);
6371- GRID_NEIGHBOR_TURNOFF_TIME = npcs.getProperty("GridNeighborTurnOffTime", 90);
6372 }
6373
6374 /**
6375Index: GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatShout.java
6376===================================================================
6377--- GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatShout.java (révision 553)
6378+++ GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatShout.java (révision 568)
6379@@ -17,7 +17,7 @@
6380 import net.sf.l2j.gameserver.datatables.MapRegionTable;
6381 import net.sf.l2j.gameserver.handler.IChatHandler;
6382 import net.sf.l2j.gameserver.model.BlockList;
6383-import net.sf.l2j.gameserver.model.L2World;
6384+import net.sf.l2j.gameserver.model.World;
6385 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6386 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
6387 import net.sf.l2j.gameserver.util.FloodProtectors;
6388@@ -39,7 +39,7 @@
6389 final CreatureSay cs = new CreatureSay(activeChar.getObjectId(), type, activeChar.getName(), text);
6390 final int region = MapRegionTable.getMapRegion(activeChar.getX(), activeChar.getY());
6391
6392- for (L2PcInstance player : L2World.getInstance().getPlayers())
6393+ for (L2PcInstance player : World.getInstance().getPlayers())
6394 {
6395 if (!BlockList.isBlocked(player, activeChar) && region == MapRegionTable.getMapRegion(player.getX(), player.getY()))
6396 player.sendPacket(cs);
6397Index: GameServer/java/net/sf/l2j/gameserver/GameServer.java
6398===================================================================
6399--- GameServer/java/net/sf/l2j/gameserver/GameServer.java (révision 553)
6400+++ GameServer/java/net/sf/l2j/gameserver/GameServer.java (révision 568)
6401@@ -98,7 +98,7 @@
6402 import net.sf.l2j.gameserver.instancemanager.ZoneManager;
6403 import net.sf.l2j.gameserver.instancemanager.games.MonsterRace;
6404 import net.sf.l2j.gameserver.model.L2Manor;
6405-import net.sf.l2j.gameserver.model.L2World;
6406+import net.sf.l2j.gameserver.model.World;
6407 import net.sf.l2j.gameserver.model.entity.Hero;
6408 import net.sf.l2j.gameserver.model.olympiad.Olympiad;
6409 import net.sf.l2j.gameserver.model.olympiad.OlympiadGameManager;
6410@@ -159,7 +159,7 @@
6411 IdFactory.getInstance();
6412
6413 StringUtil.printSection("World");
6414- L2World.getInstance();
6415+ World.getInstance();
6416 MapRegionTable.getInstance();
6417 AnnouncementTable.getInstance();
6418 ServerMemo.getInstance();
6419@@ -280,9 +280,15 @@
6420 BoatTalkingGludin.load();
6421 }
6422
6423- StringUtil.printSection("Monster Derby Track");
6424+ StringUtil.printSection("Events");
6425 MonsterRace.getInstance();
6426
6427+ if (Config.ALLOW_WEDDING)
6428+ CoupleManager.getInstance();
6429+
6430+ if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
6431+ FishingChampionshipManager.getInstance();
6432+
6433 StringUtil.printSection("Handlers");
6434 _log.config("AutoSpawnHandler: Loaded " + AutoSpawnManager.getInstance().size() + " handlers.");
6435 _log.config("AdminCommandHandler: Loaded " + AdminCommandHandler.getInstance().size() + " handlers.");
6436@@ -291,12 +297,6 @@
6437 _log.config("SkillHandler: Loaded " + SkillHandler.getInstance().size() + " handlers.");
6438 _log.config("UserCommandHandler: Loaded " + UserCommandHandler.getInstance().size() + " handlers.");
6439
6440- if (Config.ALLOW_WEDDING)
6441- CoupleManager.getInstance();
6442-
6443- if (Config.ALT_FISH_CHAMPIONSHIP_ENABLED)
6444- FishingChampionshipManager.getInstance();
6445-
6446 StringUtil.printSection("System");
6447 Runtime.getRuntime().addShutdownHook(Shutdown.getInstance());
6448 ForumsBBSManager.getInstance();
6449Index: GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/HealPercent.java
6450===================================================================
6451--- GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/HealPercent.java (révision 553)
6452+++ GameServer/java/net/sf/l2j/gameserver/handler/skillhandlers/HealPercent.java (révision 568)
6453@@ -32,8 +32,7 @@
6454 private static final L2SkillType[] SKILL_IDS =
6455 {
6456 L2SkillType.HEAL_PERCENT,
6457- L2SkillType.MANAHEAL_PERCENT,
6458- L2SkillType.CPHEAL_PERCENT
6459+ L2SkillType.MANAHEAL_PERCENT
6460 };
6461
6462 @Override
6463@@ -44,16 +43,11 @@
6464 if (handler != null)
6465 handler.useSkill(activeChar, skill, targets);
6466
6467- boolean cp = false;
6468 boolean hp = false;
6469 boolean mp = false;
6470
6471 switch (skill.getSkillType())
6472 {
6473- case CPHEAL_PERCENT:
6474- cp = true;
6475- break;
6476-
6477 case HEAL_PERCENT:
6478 hp = true;
6479 break;
6480@@ -109,18 +103,8 @@
6481 {
6482 su = new StatusUpdate(target);
6483
6484- if (cp)
6485+ if (hp)
6486 {
6487- amount = Math.min(((full) ? target.getMaxCp() : (target.getMaxCp() * skill.getPower() / 100.0)), target.getMaxCp() - target.getCurrentCp());
6488- target.setCurrentCp(amount + target.getCurrentCp());
6489-
6490- sm = SystemMessage.getSystemMessage(SystemMessageId.S1_CP_WILL_BE_RESTORED);
6491- sm.addNumber((int) amount);
6492- target.sendPacket(sm);
6493- su.addAttribute(StatusUpdate.CUR_CP, (int) target.getCurrentCp());
6494- }
6495- else if (hp)
6496- {
6497 if (activeChar != target)
6498 sm = SystemMessage.getSystemMessage(SystemMessageId.S2_HP_RESTORED_BY_S1).addCharName(activeChar);
6499 else
6500Index: GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatTell.java
6501===================================================================
6502--- GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatTell.java (révision 553)
6503+++ GameServer/java/net/sf/l2j/gameserver/handler/chathandlers/ChatTell.java (révision 568)
6504@@ -16,7 +16,7 @@
6505
6506 import net.sf.l2j.gameserver.handler.IChatHandler;
6507 import net.sf.l2j.gameserver.model.BlockList;
6508-import net.sf.l2j.gameserver.model.L2World;
6509+import net.sf.l2j.gameserver.model.World;
6510 import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
6511 import net.sf.l2j.gameserver.network.SystemMessageId;
6512 import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
6513@@ -34,7 +34,7 @@
6514 if (target == null)
6515 return;
6516
6517- final L2PcInstance receiver = L2World.getInstance().getPlayer(target);
6518+ final L2PcInstance receiver = World.getInstance().getPlayer(target);
6519 if (receiver == null || receiver.getClient().isDetached())
6520 {
6521 activeChar.sendPacket(SystemMessageId.TARGET_IS_NOT_FOUND_IN_THE_GAME);
6522Index: GameServer/dist/startLoginServer.bat
6523===================================================================
6524--- GameServer/dist/startLoginServer.bat (révision 553)
6525+++ GameServer/dist/startLoginServer.bat (révision 568)
6526@@ -1,7 +1,7 @@
6527 @echo off
6528 title aCis loginserver console
6529 :start
6530-java -Xmx128m -cp ./libs/*; net.sf.l2j.loginserver.L2LoginServer
6531+java -Xmx32m -cp ./libs/*; net.sf.l2j.loginserver.L2LoginServer
6532 if ERRORLEVEL 2 goto restart
6533 if ERRORLEVEL 1 goto error
6534 goto end
6535Index: DataPack/sql/mods_wedding.sql
6536===================================================================
6537--- DataPack/sql/mods_wedding.sql (révision 553)
6538+++ DataPack/sql/mods_wedding.sql (révision 568)
6539@@ -1,7 +1,6 @@
6540 CREATE TABLE IF NOT EXISTS `mods_wedding` (
6541- `id` int(11) NOT NULL auto_increment,
6542- `player1Id` int(11) NOT NULL default '0',
6543- `player2Id` int(11) NOT NULL default '0',
6544- `married` varchar(5) default NULL,
6545- PRIMARY KEY (`id`)
6546+ `id` INT UNSIGNED NOT NULL DEFAULT 0,
6547+ `requesterId` INT UNSIGNED NOT NULL DEFAULT 0,
6548+ `partnerId` INT UNSIGNED NOT NULL DEFAULT 0,
6549+ PRIMARY KEY (`id`)
6550 );
6551\ No newline at end of file
6552Index: GameServer/dist/LoginServer_loop.sh
6553===================================================================
6554--- GameServer/dist/LoginServer_loop.sh (révision 553)
6555+++ GameServer/dist/LoginServer_loop.sh (révision 568)
6556@@ -5,7 +5,7 @@
6557 do
6558 [ -f log/java0.log.0 ] && mv log/java0.log.0 "log/`date +%Y-%m-%d_%H-%M-%S`_java.log"
6559 [ -f log/stdout.log ] && mv log/stdout.log "log/`date +%Y-%m-%d_%H-%M-%S`_stdout.log"
6560- nice -n -2 java -Xmx512m -cp ./libs/*:l2jserver.jar net.sf.l2j.loginserver.L2LoginServer > log/stdout.log 2>&1
6561+ nice -n -2 java -Xmx32m -cp ./libs/*:l2jserver.jar net.sf.l2j.loginserver.L2LoginServer > log/stdout.log 2>&1
6562 err=$?
6563 # /etc/init.d/mysql restart
6564 sleep 10;
6565Index: GameServer/config/npcs.properties
6566===================================================================
6567--- GameServer/config/npcs.properties (révision 553)
6568+++ GameServer/config/npcs.properties (révision 568)
6569@@ -252,15 +252,4 @@
6570 MinNPCAnimation = 20
6571 MaxNPCAnimation = 40
6572 MinMonsterAnimation = 10
6573-MaxMonsterAnimation = 40
6574-
6575-# Grid options: Grids can now turn themselves on and off. This also affects the loading
6576-# and processing of all AI tasks and (in the future) geodata within this grid.
6577-# Turn on for a grid with a person in it is immediate, but it then turns on
6578-# the 8 neighboring grids based on the specified number of seconds.
6579-# Turn off for self and neighbors occures after the specified number of
6580-# seconds have passed during which a grid has had no players in or in any of its neighbors.
6581-# The always on option allows to ignore all this and let all grids be active at all times
6582-GridsAlwaysOn = False
6583-GridNeighborTurnOnTime = 1
6584-GridNeighborTurnOffTime = 90
6585\ No newline at end of file
6586+MaxMonsterAnimation = 40
6587\ No newline at end of file
6588Index: DataPack/data/xml/skills/1100-1199.xml
6589===================================================================
6590--- DataPack/data/xml/skills/1100-1199.xml (révision 553)
6591+++ DataPack/data/xml/skills/1100-1199.xml (révision 568)
6592@@ -874,7 +874,7 @@
6593 <set name="castRange" val="600"/>
6594 <set name="effectRange" val="1100"/>
6595 <for>
6596- <effect count="5" name="Fear" time="6" val="0" stackOrder="1" stackType="turn_flee" />
6597+ <effect name="Fear" time="30" val="0" stackOrder="1" stackType="turn_flee" />
6598 </for>
6599 </skill>
6600 <skill id="1170" levels="13" name="Anchor" enchantLevels1="30" enchantLevels2="30" >
6601Index: DataPack/data/xml/skills/3100-3199.xml
6602===================================================================
6603--- DataPack/data/xml/skills/3100-3199.xml (révision 553)
6604+++ DataPack/data/xml/skills/3100-3199.xml (révision 568)
6605@@ -343,23 +343,23 @@
6606 </for>
6607 </skill>
6608 <skill id="3125" levels="10" name="Item Skill: Battle Roar">
6609- <table name="#mpInitialConsume"> 10 11 11 12 13 13 14 15 16 17 </table>
6610- <table name="#mpConsume"> 38 42 44 47 51 52 55 58 61 65 </table>
6611- <table name="#magicLvl"> 46 49 52 55 58 61 64 67 70 75 </table>
6612+ <table name="#mpConsume"> 48 53 55 59 64 65 69 73 77 82 </table>
6613+ <table name="#magicLvl"> 40 44 48 52 56 60 64 68 72 76 </table>
6614+ <table name="#stackOrder"> 1 2 3 4 5 6 7 8 9 10 </table>
6615+ <table name="#maxHp"> 30 60 90 120 150 180 210 240 270 300 </table>
6616 <set name="magicLvl" val="#magicLvl" />
6617- <set name="mpInitialConsume" val="#mpInitialConsume" />
6618 <set name="mpConsume" val="#mpConsume" />
6619- <set name="power" val="3" />
6620+ <set name="power" val="#maxHp" />
6621 <set name="target" val="TARGET_SELF" />
6622- <set name="reuseDelay" val="300000" />
6623+ <set name="reuseDelay" val="180000" />
6624 <set name="staticReuse" val="true" />
6625- <set name="hitTime" val="4000" />
6626+ <set name="hitTime" val="1500" />
6627 <set name="skillType" val="HEAL_PERCENT" />
6628 <set name="operateType" val="OP_ACTIVE" />
6629 <set name="staticHitTime" val="true" />
6630 <for>
6631- <effect name="Buff" time="120" val="0" stackOrder="1" stackType="abnormal_item">
6632- <mul order="0x40" stat="maxHp" val="1.03" />
6633+ <effect name="Buff" time="120" val="0" stackOrder="#stackOrder" stackType="abnormal_item" >
6634+ <add order="0x40" stat="maxHp" val="#maxHp" />
6635 </effect>
6636 </for>
6637 </skill>
6638Index: DataPack/data/xml/skills/0400-0499.xml
6639===================================================================
6640--- DataPack/data/xml/skills/0400-0499.xml (révision 553)
6641+++ DataPack/data/xml/skills/0400-0499.xml (révision 568)
6642@@ -383,6 +383,7 @@
6643 <skill id="413" levels="8" name="Rapid Fire">
6644 <table name="#mpConsume"> 28 29 30 31 32 33 34 34 </table>
6645 <table name="#atk"> 62 67 73 78 83 88 94 100 </table>
6646+ <table name="#stackOrder"> 1 2 3 4 5 6 7 8 </table>
6647 <set name="mpConsume" val="#mpConsume"/>
6648 <set name="target" val="TARGET_SELF"/>
6649 <set name="skillType" val="BUFF"/>
6650@@ -391,7 +392,7 @@
6651 <set name="hitTime" val="2000"/>
6652 <set name="weaponsAllowed" val="BOW" /> <!-- Bow -->
6653 <for>
6654- <effect count="1" name="Buff" time="120" val="0">
6655+ <effect count="1" name="Buff" time="120" val="0" stackOrder="#stackOrder" stackType="rapid_fire">
6656 <add order="0x40" stat="pAtk" val="#atk">
6657 <using kind="BOW"/>
6658 </add>
6659@@ -500,7 +501,7 @@
6660 <set name="itemConsumeId" val="1661"/>
6661 <set name="mpConsume" val="#mpConsume"/>
6662 <set name="hitTime" val="3000"/>
6663- <set name="reuseDelay" val="120000"/>
6664+ <set name="reuseDelay" val="1200000"/>
6665 <set name="target" val="TARGET_SELF"/>
6666 <set name="skillType" val="EXTRACTABLE" />
6667 <set name="operateType" val="OP_ACTIVE"/>
6668@@ -798,6 +799,7 @@
6669 </skill>
6670 <skill id="439" levels="1" name="Shield of Revenge">
6671 <set name="magicLvl" val="79" />
6672+ <set name="mpConsume" val="87"/>
6673 <set name="hitTime" val="4000" />
6674 <set name="mpConsume" val="78" />
6675 <set name="operateType" val="OP_ACTIVE" />
6676@@ -882,10 +884,10 @@
6677 <set name="target" val="TARGET_AREA_CORPSE_MOB" />
6678 </skill>
6679 <skill id="445" levels="1" name="Mirage">
6680- <set name="aggroPoints" val="673" />
6681+ <set name="aggroPoints" val="669" />
6682 <set name="hitTime" val="2000"/>
6683 <set name="magicLvl" val="79"/>
6684- <set name="mpConsume" val="43"/>
6685+ <set name="mpConsume" val="63"/>
6686 <set name="operateType" val="OP_ACTIVE"/>
6687 <set name="reuseDelay" val="300000"/>
6688 <set name="skillType" val="BUFF"/>
6689@@ -895,29 +897,31 @@
6690 </for>
6691 </skill>
6692 <skill id="446" levels="1" name="Dodge">
6693+ <set name="aggroPoints" val="669" />
6694 <set name="hitTime" val="500" />
6695- <set name="mpConsume" val="29" />
6696+ <set name="mpConsume" val="49" />
6697 <set name="operateType" val="OP_ACTIVE" />
6698- <set name="reuseDelay" val="150000" />
6699+ <set name="reuseDelay" val="300000" />
6700 <set name="skillType" val="BUFF" />
6701 <set name="target" val="TARGET_SELF" />
6702 <for>
6703 <effect name="Buff" time="5" val="0" stackOrder="1" stackType="avoid_skill">
6704- <add order="0x40" stat="pSkillEvas" val="90" />
6705+ <add order="0x40" stat="pSkillEvas" val="100" />
6706 </effect>
6707 </for>
6708 </skill>
6709 <skill id="447" levels="1" name="Counterattack">
6710+ <set name="aggroPoints" val="669" />
6711 <set name="magicLvl" val="79" />
6712 <set name="hitTime" val="500" />
6713- <set name="mpConsume" val="29" />
6714+ <set name="mpConsume" val="49" />
6715 <set name="operateType" val="OP_ACTIVE" />
6716- <set name="reuseDelay" val="150000" />
6717+ <set name="reuseDelay" val="300000" />
6718 <set name="skillType" val="BUFF" />
6719 <set name="target" val="TARGET_SELF" />
6720 <for>
6721- <effect name="Buff" time="10" val="0" stackOrder="1" stackType="counter_skill">
6722- <add order="0x40" stat="vengeancePdam" val="90" />
6723+ <effect name="Buff" time="5" val="0" stackOrder="1" stackType="counter_skill">
6724+ <add order="0x40" stat="vengeancePdam" val="100" />
6725 </effect>
6726 </for>
6727 </skill>
6728@@ -1020,8 +1024,9 @@
6729 </effect>
6730 </for>
6731 </skill>
6732- <skill id="452" levels="5" name="Shock Stomp">
6733- <table name="#effectPower"> 40 50 60 70 80 </table>
6734+ <skill id="452" levels="5" name="Shock Stomp" enchantLevels1="30" >
6735+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
6736+ <table name="#ench1power"> 50 51 52 52 53 54 54 55 56 56 57 58 58 59 60 60 61 62 62 63 64 64 65 66 66 67 68 68 69 70 </table>
6737 <table name="#magicLvl"> 55 60 64 68 72 </table>
6738 <table name="#mpConsume"> 55 55 55 55 55 </table>
6739 <set name="weaponsAllowed" val="POLE"/>
6740@@ -1037,9 +1042,11 @@
6741 <set name="operateType" val="OP_ACTIVE"/>
6742 <set name="skillType" val="STUN" />
6743 <set name="isDebuff" val="true" />
6744+ <enchant1 name="power" val="#ench1power"/>
6745+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6746 <for>
6747- <effect name="Stun" time="5" val="0" stackOrder="2" stackType="stun" />
6748- <effect name="RemoveTarget" noicon="1" val="0" effectPower="#effectPower" effectType="DEBUFF" />
6749+ <effect name="Stun" time="9" val="0" stackOrder="2" stackType="stun" />
6750+ <effect name="RemoveTarget" noicon="1" val="0" effectPower="50" effectType="DEBUFF" />
6751 </for>
6752 </skill>
6753 <skill id="453" levels="1" name="Escape Shackle">
6754Index: DataPack/data/xml/skills/1300-1399.xml
6755===================================================================
6756--- DataPack/data/xml/skills/1300-1399.xml (révision 553)
6757+++ DataPack/data/xml/skills/1300-1399.xml (révision 568)
6758@@ -1573,7 +1573,10 @@
6759 <effect name="Betray" time="30" val="0" stackOrder="1" stackType="derangement" />
6760 </for>
6761 </skill>
6762- <skill id="1381" levels="5" name="Mass Fear">
6763+ <skill id="1381" levels="5" name="Mass Fear" enchantLevels1="30" enchantLevels2="30" >
6764+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
6765+ <table name="#ench2Power"> 20 21 22 22 23 24 24 25 26 26 27 28 28 29 30 30 31 32 32 33 34 34 35 36 36 37 38 38 39 40 </table>
6766+ <table name="#ench1MpConsume"> 100 98 97 96 95 93 91 90 88 87 86 85 83 82 81 80 78 77 75 73 72 71 70 68 67 66 65 63 62 60 </table>
6767 <table name="#magicLvl"> 58 62 66 70 74 </table>
6768 <table name="#mpConsume"> 80 87 93 98 103 </table>
6769 <set name="magicLvl" val="#magicLvl" />
6770@@ -1585,16 +1588,23 @@
6771 <set name="skillRadius" val="200"/>
6772 <set name="skillType" val="FEAR"/>
6773 <set name="operateType" val="OP_ACTIVE"/>
6774- <set name="power" val="30" /> <!-- Base Land Rate -->
6775+ <set name="power" val="20" /> <!-- Base Land Rate -->
6776 <set name="castRange" val="500"/>
6777 <set name="effectRange" val="1000"/>
6778 <set name="isMagic" val="true"/>
6779 <set name="isDebuff" val="true" />
6780+ <enchant1 name="mpConsume" val="#ench1MpConsume"/>
6781+ <enchant2 name="power" val="#ench2Power"/>
6782+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6783+ <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
6784 <for>
6785- <effect count="5" name="Fear" time="6" val="0" stackOrder="1" stackType="turn_flee" />
6786+ <effect name="Fear" time="30" val="0" stackOrder="1" stackType="turn_flee" />
6787 </for>
6788 </skill>
6789- <skill id="1382" levels="5" name="Mass Gloom">
6790+ <skill id="1382" levels="5" name="Mass Gloom" enchantLevels1="30" enchantLevels2="30" >
6791+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
6792+ <table name="#ench2Power"> 40 41 42 42 43 44 44 45 46 46 47 48 48 49 50 50 51 52 52 53 54 54 55 56 56 57 58 58 59 60 </table>
6793+ <table name="#ench1MpConsume"> 100 98 97 96 95 93 91 90 88 87 86 85 83 82 81 80 78 77 75 73 72 71 70 68 67 66 65 63 62 60 </table>
6794 <table name="#magicLvl"> 58 62 66 70 74 </table>
6795 <table name="#mpConsume"> 80 87 93 98 103 </table>
6796 <table name="#itemConsumeCount"> 4 4 4 5 5 </table>
6797@@ -1614,6 +1624,10 @@
6798 <set name="power" val="40" /> <!-- Base Land Rate -->
6799 <set name="castRange" val="900"/>
6800 <set name="effectRange" val="1400"/>
6801+ <enchant1 name="mpConsume" val="#ench1MpConsume"/>
6802+ <enchant2 name="power" val="#ench2Power"/>
6803+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6804+ <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
6805 <for>
6806 <effect name="Debuff" time="15" val="0" stackOrder="3" stackType="md_down">
6807 <mul order="0x30" stat="mDef" val="0.77" />
6808@@ -1865,7 +1879,10 @@
6809 </effect>
6810 </for>
6811 </skill>
6812- <skill id="1394" levels="10" name="Trance">
6813+ <skill id="1394" levels="10" name="Trance" enchantLevels1="30" enchantLevels2="30" >
6814+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
6815+ <table name="#ench2Power"> 80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100 </table>
6816+ <table name="#ench1MpConsume"> 32 32 32 31 31 31 30 30 28 28 28 27 27 27 26 26 26 25 25 23 23 23 22 22 22 21 21 21 20 20 </table>
6817 <table name="#magicLvl"> 56 58 60 62 64 66 68 70 72 74 </table>
6818 <table name="#mpConsume"> 27 28 28 29 30 32 33 33 34 35 </table>
6819 <set name="magicLvl" val="#magicLvl" />
6820@@ -1881,11 +1898,17 @@
6821 <set name="effectRange" val="1100"/>
6822 <set name="isMagic" val="true"/>
6823 <set name="isDebuff" val="true" />
6824+ <enchant1 name="mpConsume" val="#ench1MpConsume"/>
6825+ <enchant2 name="power" val="#ench2Power"/>
6826+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6827+ <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
6828 <for>
6829 <effect name="Sleep" time="15" val="0" stackOrder="1" stackType="sleep" />
6830 </for>
6831 </skill>
6832- <skill id="1395" levels="10" name="Erase">
6833+ <skill id="1395" levels="10" name="Erase" enchantLevels1="30" >
6834+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
6835+ <table name="#ench1MpConsume"> 66 65 65 63 62 62 61 60 58 58 57 56 55 55 53 52 52 51 50 48 48 47 46 45 45 43 42 42 41 40 </table>
6836 <table name="#mpConsume"> 52 54 55 58 60 62 64 65 67 69 </table>
6837 <table name="#itemConsumeCount"> 3 3 3 3 4 4 4 5 5 5 </table>
6838 <table name="#magicLvl"> 56 58 60 62 64 66 68 70 72 74 </table>
6839@@ -1901,8 +1924,13 @@
6840 <set name="power" val="100" /> <!-- Base Land Rate -->
6841 <set name="castRange" val="600"/>
6842 <set name="isMagic" val="true"/>
6843+ <enchant1 name="mpConsume" val="#ench1MpConsume"/>
6844+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6845 </skill>
6846- <skill id="1396" levels="10" name="Magical Backfire">
6847+ <skill id="1396" levels="10" name="Magical Backfire" enchantLevels1="30" enchantLevels2="30" >
6848+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 82 83 83 83 84 84 85 85 85 </table>
6849+ <table name="#ench2Power"> 80 81 82 82 83 84 84 85 86 86 87 88 88 89 90 90 91 92 92 93 94 94 95 96 96 97 98 98 99 100 </table>
6850+ <table name="#ench1MpConsume"> 66 65 65 63 62 62 61 60 58 58 57 56 55 55 53 52 52 51 50 48 48 47 46 45 45 43 42 42 41 40 </table>
6851 <table name="#mpConsume"> 52 54 55 58 60 62 64 65 67 69 </table>
6852 <table name="#magicLvl"> 56 58 60 62 64 66 68 70 72 74 </table>
6853 <set name="magicLvl" val="#magicLvl" />
6854@@ -1918,6 +1946,10 @@
6855 <set name="castRange" val="600"/>
6856 <set name="effectRange" val="1100"/>
6857 <set name="isMagic" val="true"/>
6858+ <enchant1 name="mpConsume" val="#ench1MpConsume"/>
6859+ <enchant2 name="power" val="#ench2Power"/>
6860+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6861+ <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
6862 <for>
6863 <effect name="Debuff" time="30" val="0" stackOrder="3" stackType="mp_cost_up">
6864 <mul order="0x30" stat="MagicalMpConsumeRate" val="3" />
6865Index: DataPack/data/xml/skills/3500-3599.xml
6866===================================================================
6867--- DataPack/data/xml/skills/3500-3599.xml (révision 553)
6868+++ DataPack/data/xml/skills/3500-3599.xml (révision 568)
6869@@ -898,6 +898,7 @@
6870 <for>
6871 <mul order="0x30" stat="maxHp" val="1.25"/> <!-- HP +25% -->
6872 <mul order="0x30" stat="maxMp" val="1.30"/> <!-- MP +30% -->
6873+ <mul order="0x30" stat="maxCp" val="1.5"/> <!-- CP +50% -->
6874 <mul order="0x30" stat="rShld" val="1.39"/> <!-- Shield Block Rate +39% -->
6875 <mul order="0x30" stat="pvpPhysDmg" val="1.05"/> <!-- PVP Damage Bonus +5% -->
6876 <mul order="0x30" stat="pvpMagicalDmg" val="1.05"/> <!-- PVP Damage Bonus +5% -->
6877Index: DataPack/data/xml/skills/0300-0399.xml
6878===================================================================
6879--- DataPack/data/xml/skills/0300-0399.xml (révision 553)
6880+++ DataPack/data/xml/skills/0300-0399.xml (révision 568)
6881@@ -1787,7 +1787,7 @@
6882 <sub order="0x40" stat="cancelVuln" val="80" />
6883 <mul order="0x30" stat="gainHp" val="2" />
6884 <mul order="0x30" stat="pDef" val="0.75"/>
6885- <mul order="0x30" stat="mDef" val="0.75"/>
6886+ <sub order="0x40" stat="mDef" val="25"/>
6887 </effect>
6888 <effect name="BlockDebuff" time="120" noicon="1" val="0" stackOrder="3" stackType="abnormal_debuff_invincibility" />
6889 </for>
6890Index: DataPack/data/xml/skills/1000-1099.xml
6891===================================================================
6892--- DataPack/data/xml/skills/1000-1099.xml (révision 553)
6893+++ DataPack/data/xml/skills/1000-1099.xml (révision 568)
6894@@ -845,9 +845,13 @@
6895 </effect>
6896 </enchant1for>
6897 </skill>
6898- <skill id="1045" levels="6" name="Blessed Body">
6899- <table name="#mpInitialConsume"> 8 9 10 11 12 14 </table>
6900- <table name="#mpConsume"> 31 35 38 41 48 53 </table>
6901+ <skill id="1045" levels="6" name="Blessed Body" enchantLevels1="30" enchantLevels2="30" >
6902+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 83 83 83 84 84 84 85 85 85 </table>
6903+ <table name="#ench2mpInitialConsume"> 13 13 13 12 12 12 12 11 11 11 11 11 10 10 10 10 9 9 9 9 9 8 8 8 8 7 7 7 7 7 </table>
6904+ <table name="#ench2MpConsume"> 52 51 50 50 48 47 46 46 45 44 43 42 41 40 39 38 38 37 36 35 34 33 32 31 30 30 29 28 27 26 </table>
6905+ <table name="#ench1time"> 1240 1280 1320 1360 1400 1440 1480 1520 1560 1600 1640 1680 1720 1760 1800 1840 1880 1920 1960 2000 2040 2080 2120 2160 2200 2240 2280 2320 2360 2400 </table>
6906+ <table name="#mpInitialConsume"> 8 9 10 10 12 13 </table>
6907+ <table name="#mpConsume"> 31 35 38 42 48 54 </table>
6908 <table name="#maxHp"> 1.1 1.15 1.2 1.25 1.3 1.35 </table>
6909 <table name="#stackOrder"> 1 2 3 4 5 6 </table>
6910 <table name="#aggro"> 418 457 495 532 597 646 </table>
6911@@ -862,11 +866,20 @@
6912 <set name="castRange" val="400"/>
6913 <set name="effectRange" val="900"/>
6914 <set name="aggroPoints" val="#aggro"/>
6915+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6916+ <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
6917+ <enchant2 name="mpConsume" val="#ench2MpConsume"/>
6918+ <enchant2 name="mpInitialConsume" val="#ench2mpInitialConsume"/>
6919 <for>
6920 <effect name="Buff" time="1200" val="0" stackOrder="#stackOrder" stackType="max_hp_up">
6921 <mul order="0x30" stat="maxHp" val="#maxHp"/>
6922 </effect>
6923 </for>
6924+ <enchant1for>
6925+ <effect name="Buff" time="#ench1time" val="0" stackOrder="6" stackType="max_hp_up">
6926+ <mul order="0x30" stat="maxHp" val="1.35"/>
6927+ </effect>
6928+ </enchant1for>
6929 </skill>
6930 <skill id="1047" levels="4" name="Mana Regeneration">
6931 <table name="#regMp"> 1.72 2.16 2.74 3.09 </table>
6932@@ -892,9 +905,13 @@
6933 </effect>
6934 </for>
6935 </skill>
6936- <skill id="1048" levels="6" name="Blessed Soul">
6937- <table name="#mpInitialConsume"> 8 9 10 11 12 13 </table>
6938- <table name="#mpConsume"> 31 35 38 41 46 52 </table>
6939+ <skill id="1048" levels="6" name="Blessed Soul" enchantLevels1="30" enchantLevels2="30" >
6940+ <table name="#enchantMagicLvl"> 76 76 76 77 77 77 78 78 78 79 79 79 80 80 80 81 81 81 82 82 82 83 83 83 84 84 84 85 85 85 </table>
6941+ <table name="#ench2mpInitialConsume"> 13 12 12 12 12 11 11 11 11 11 10 10 10 10 10 9 9 9 9 8 8 8 8 8 7 7 7 7 6 6 </table>
6942+ <table name="#ench2MpConsume"> 50 50 49 48 46 46 45 45 44 42 42 41 40 38 38 38 37 36 34 34 33 32 32 30 30 29 28 26 26 26 </table>
6943+ <table name="#ench1time"> 1240 1280 1320 1360 1400 1440 1480 1520 1560 1600 1640 1680 1720 1760 1800 1840 1880 1920 1960 2000 2040 2080 2120 2160 2200 2240 2280 2320 2360 2400 </table>
6944+ <table name="#mpInitialConsume"> 8 9 10 10 12 13 </table>
6945+ <table name="#mpConsume"> 31 35 38 42 46 52 </table>
6946 <table name="#maxMp"> 1.1 1.15 1.2 1.25 1.3 1.35 </table>
6947 <table name="#mpConsume"> 39 44 48 52 62 70 </table>
6948 <table name="#stackOrder"> 1 2 3 4 5 6 </table>
6949@@ -910,11 +927,20 @@
6950 <set name="castRange" val="400"/>
6951 <set name="effectRange" val="900"/>
6952 <set name="aggroPoints" val="#aggro"/>
6953+ <enchant1 name="magicLvl" val="#enchantMagicLvl"/>
6954+ <enchant2 name="magicLvl" val="#enchantMagicLvl"/>
6955+ <enchant2 name="mpConsume" val="#ench2MpConsume"/>
6956+ <enchant2 name="mpInitialConsume" val="#ench2mpInitialConsume"/>
6957 <for>
6958 <effect name="Buff" time="1200" val="0" stackOrder="#stackOrder" stackType="max_mp_up">
6959 <mul order="0x30" stat="maxMp" val="#maxMp"/>
6960 </effect>
6961 </for>
6962+ <enchant1for>
6963+ <effect name="Buff" time="#ench1time" val="0" stackOrder="6" stackType="max_mp_up">
6964+ <mul order="0x30" stat="maxMp" val="1.35"/>
6965+ </effect>
6966+ </enchant1for>
6967 </skill>
6968 <skill id="1049" levels="14" name="Requiem">
6969 <table name="#mpInitialConsume"> 11 12 13 14 16 16 17 18 18 19 19 20 20 21 </table>
6970@@ -1567,7 +1593,7 @@
6971 <set name="castRange" val="600"/>
6972 <set name="effectRange" val="1100"/>
6973 <for>
6974- <effect count="5" name="Fear" time="6" val="0" stackOrder="1" stackType="turn_flee"/>
6975+ <effect name="Fear" time="30" val="0" stackOrder="1" stackType="turn_flee"/>
6976 </for>
6977 </skill>
6978 <skill id="1095" levels="5" name="Venom">
6979Index: DataPack/data/xml/skills/1200-1299.xml
6980===================================================================
6981--- DataPack/data/xml/skills/1200-1299.xml (révision 553)
6982+++ DataPack/data/xml/skills/1200-1299.xml (révision 568)
6983@@ -1374,10 +1374,10 @@
6984 <enchant2 name="mpConsume" val="#ench2MpConsume"/>
6985 <enchant2 name="mpInitialConsume" val="#ench2mpInitialConsume"/>
6986 <for>
6987- <effect time="15" name="HealOverTime" val="#hot" stackOrder="#stackOrder" stackType="life_force_orc"/>
6988+ <effect count="15" name="HealOverTime" val="#hot" stackOrder="#stackOrder" stackType="life_force_orc"/>
6989 </for>
6990 <enchant1for>
6991- <effect time="15" name="HealOverTime" val="#ench1hot" stackOrder="#ench1stackOrder" stackType="life_force_orc"/>
6992+ <effect count="15" name="HealOverTime" val="#ench1hot" stackOrder="#ench1stackOrder" stackType="life_force_orc"/>
6993 </enchant1for>
6994 </skill>
6995 <skill id="1257" levels="3" name="Decrease Weight" enchantLevels1="30" enchantLevels2="30" >
6996Index: DataPack/data/xml/skills/1400-1499.xml
6997===================================================================
6998--- DataPack/data/xml/skills/1400-1499.xml (révision 553)
6999+++ DataPack/data/xml/skills/1400-1499.xml (révision 568)
7000@@ -208,18 +208,18 @@
7001 </skill>
7002 <skill id="1411" levels="1" name="Mystic Immunity">
7003 <set name="castRange" val="400"/>
7004- <set name="effectRange" val="900"/>
7005+ <set name="effectRange" val="600"/>
7006 <set name="hitTime" val="4000"/>
7007 <set name="isMagic" val="true"/>
7008 <set name="magicLvl" val="79"/>
7009 <set name="mpConsume" val="73"/>
7010 <set name="operateType" val="OP_ACTIVE"/>
7011- <set name="reuseDelay" val="600000"/>
7012+ <set name="reuseDelay" val="120000"/>
7013 <set name="skillType" val="BUFF"/>
7014- <set name="target" val="TARGET_ONE"/>
7015+ <set name="target" val="TARGET_PARTY_MEMBER"/>
7016 <for>
7017- <effect name="BlockBuff" time="30" val="0" stackOrder="3" stackType="abnormal_buff_invincibility" />
7018- <effect name="BlockDebuff" time="30" noicon="1" val="0" stackOrder="3" stackType="abnormal_debuff_invincibility" />
7019+ <effect name="BlockBuff" time="30" val="0" stackOrder="2" stackType="abnormal_buff_invincibility" />
7020+ <effect name="BlockDebuff" time="30" noicon="1" val="0" stackOrder="2" stackType="abnormal_debuff_invincibility" />
7021 </for>
7022 </skill>
7023 <skill id="1412" levels="1" name="Spell Turning">
7024@@ -323,16 +323,16 @@
7025 <set name="mpConsume" val="228" />
7026 <set name="itemConsumeId" val="3031"/>
7027 <set name="itemConsumeCount" val="20"/>
7028- <set name="power" val="100"/>
7029+ <set name="power" val="800"/>
7030 <set name="target" val="TARGET_ALLY"/>
7031 <set name="skillRadius" val="1000"/>
7032 <set name="reuseDelay" val="1200000"/>
7033 <set name="hitTime" val="2500"/>
7034- <set name="skillType" val="CPHEAL_PERCENT" />
7035+ <set name="skillType" val="COMBATPOINTHEAL" />
7036 <set name="isMagic" val="true"/>
7037 <set name="operateType" val="OP_ACTIVE"/>
7038 <for>
7039- <effect name="Buff" time="300" val="0" stackOrder="2" stackType="cp_up">
7040+ <effect name="Buff" time="300" val="0" stackOrder="1" stackType="cp_up">
7041 <add order="0x40" stat="maxCp" val="800" />
7042 </effect>
7043 </for>
7044Index: DataPack/data/xml/skills/5000-5099.xml
7045===================================================================
7046--- DataPack/data/xml/skills/5000-5099.xml (révision 553)
7047+++ DataPack/data/xml/skills/5000-5099.xml (révision 568)
7048@@ -1249,22 +1249,24 @@
7049 <set name="magicLvl" val="80" />
7050 <set name="mpConsume" val="#mpConsume" />
7051 <set name="power" val="2112" />
7052- <set name="target" val="TARGET_AURA" />
7053+ <set name="target" val="TARGET_ONE" />
7054 <set name="skillRadius" val="150" />
7055 <set name="hitTime" val="1500" />
7056 <set name="coolTime" val="800" />
7057+ <set name="reuseDelay" val="6000"/>
7058 <set name="skillType" val="PDAM" />
7059 <set name="operateType" val="OP_ACTIVE" />
7060 </skill>
7061 <skill id="5083" levels="4" name="Shock">
7062 <table name="#mpConsume"> 93 93 93 5 </table>
7063- <set name="magicLvl" val="80" />
7064+ <table name="#magicLvl"> 80 82 84 86 </table>
7065+ <set name="magicLvl" val="#magicLvl" />
7066 <set name="lvlDepend" val="1" />
7067 <set name="mpConsume" val="#mpConsume" />
7068 <set name="power" val="1704" />
7069 <set name="target" val="TARGET_ONE" />
7070 <set name="hitTime" val="1500" />
7071- <set name="coolTime" val="800" />
7072+ <set name="reuseDelay" val="6000"/>
7073 <set name="skillType" val="PDAM" />
7074 <set name="operateType" val="OP_ACTIVE" />
7075 <set name="isDebuff" val="true" />
7076@@ -1271,7 +1273,8 @@
7077 <set name="castRange" val="40" />
7078 <set name="effectRange" val="200" />
7079 <for>
7080- <effect name="Stun" time="9" val="0" effectPower="50" effectType="STUN" stackOrder="1" stackType="stun" />
7081+ <effect name="Stun" time="9" val="0" effectPower="80" effectType="STUN" stackOrder="1" stackType="stun" />
7082+ <effect name="RemoveTarget" noicon="1" val="0"/>
7083 </for>
7084 </skill>
7085 <skill id="5084" levels="4" name="NPC Blinding Blow">
7086@@ -1286,7 +1289,7 @@
7087 <set name="skillType" val="BLOW" />
7088 <set name="operateType" val="OP_ACTIVE" />
7089 <set name="castRange" val="40" />
7090- <set name="effectRange" val="200" />
7091+ <set name="effectRange" val="60" />
7092 <for>
7093 <effect self="1" name="Buff" time="15" val="0" stackOrder="1" stackType="speed_up_special">
7094 <add order="0x40" stat="runSpd" val="40" />
7095@@ -1308,6 +1311,7 @@
7096 <set name="effectRange" val="900"/>
7097 <for>
7098 <effect count="1" name="Stun" time="9" val="0" stackOrder="1" stackType="Stun" effectPower="50" effectType="STUN"/>
7099+ <effect name="RemoveTarget" noicon="1" val="0" effectPower="50" effectType="DEBUFF"/>
7100 </for>
7101 </skill>
7102 <skill id="5086" levels="1" name="Deadly Poison">
7103Index: DataPack/data/html/default/30747.htm
7104===================================================================
7105--- DataPack/data/html/default/30747.htm (révision 553)
7106+++ DataPack/data/html/default/30747.htm (révision 568)
7107@@ -1,4 +1,4 @@
7108 <html><body>Fairy Mimyu:<br>
7109-Ah...! I've returned to this world after a long time; so why is it so busy like this? There are people everywhere... Is some half-wit going to catch and stuff me?... Have hunters come all the way up to here now? I mean, how many more do they have to kill to be satisfied?... Yah! That's dangerous! It's dangerous! Don't kill me...<br>
7110+It has been many years since I visited this place... Why is it so busy? People everywhere... I am afraid some half-wit is going to try to catch and stuff me! Are there hunters about? How many more of us must die to satisfy their ignorant blood lust? It's dangerous I tell you! Don't let them kill me...<br>
7111 <a action="bypass -h npc_%objectId%_Quest">Quest</a>
7112 </body></html>
7113\ No newline at end of file
7114Index: DataPack/data/xml/skillstrees/enchant_skills_tree.xml
7115===================================================================
7116--- DataPack/data/xml/skillstrees/enchant_skills_tree.xml (révision 553)
7117+++ DataPack/data/xml/skillstrees/enchant_skills_tree.xml (révision 568)
7118@@ -14941,6 +14941,134 @@
7119 <data level="130" type="+30 Summon" enchant="30" />
7120 </enchant>
7121
7122+ <!-- Mass Fear -->
7123+ <enchant id="1381" name="Mass Fear" baseLvl="5">
7124+ <data level="101" type="+1 Cost" enchant="1" />
7125+ <data level="102" type="+2 Cost" enchant="2" />
7126+ <data level="103" type="+3 Cost" enchant="3" />
7127+ <data level="104" type="+4 Cost" enchant="4" />
7128+ <data level="105" type="+5 Cost" enchant="5" />
7129+ <data level="106" type="+6 Cost" enchant="6" />
7130+ <data level="107" type="+7 Cost" enchant="7" />
7131+ <data level="108" type="+8 Cost" enchant="8" />
7132+ <data level="109" type="+9 Cost" enchant="9" />
7133+ <data level="110" type="+10 Cost" enchant="10" />
7134+ <data level="111" type="+11 Cost" enchant="11" />
7135+ <data level="112" type="+12 Cost" enchant="12" />
7136+ <data level="113" type="+13 Cost" enchant="13" />
7137+ <data level="114" type="+14 Cost" enchant="14" />
7138+ <data level="115" type="+15 Cost" enchant="15" />
7139+ <data level="116" type="+16 Cost" enchant="16" />
7140+ <data level="117" type="+17 Cost" enchant="17" />
7141+ <data level="118" type="+18 Cost" enchant="18" />
7142+ <data level="119" type="+19 Cost" enchant="19" />
7143+ <data level="120" type="+20 Cost" enchant="20" />
7144+ <data level="121" type="+21 Cost" enchant="21" />
7145+ <data level="122" type="+22 Cost" enchant="22" />
7146+ <data level="123" type="+23 Cost" enchant="23" />
7147+ <data level="124" type="+24 Cost" enchant="24" />
7148+ <data level="125" type="+25 Cost" enchant="25" />
7149+ <data level="126" type="+26 Cost" enchant="26" />
7150+ <data level="127" type="+27 Cost" enchant="27" />
7151+ <data level="128" type="+28 Cost" enchant="28" />
7152+ <data level="129" type="+29 Cost" enchant="29" />
7153+ <data level="130" type="+30 Cost" enchant="30" />
7154+ <data level="141" type="+1 Chance" enchant="1" />
7155+ <data level="142" type="+2 Chance" enchant="2" />
7156+ <data level="143" type="+3 Chance" enchant="3" />
7157+ <data level="144" type="+4 Chance" enchant="4" />
7158+ <data level="145" type="+5 Chance" enchant="5" />
7159+ <data level="146" type="+6 Chance" enchant="6" />
7160+ <data level="147" type="+7 Chance" enchant="7" />
7161+ <data level="148" type="+8 Chance" enchant="8" />
7162+ <data level="149" type="+9 Chance" enchant="9" />
7163+ <data level="150" type="+10 Chance" enchant="10" />
7164+ <data level="151" type="+11 Chance" enchant="11" />
7165+ <data level="152" type="+12 Chance" enchant="12" />
7166+ <data level="153" type="+13 Chance" enchant="13" />
7167+ <data level="154" type="+14 Chance" enchant="14" />
7168+ <data level="155" type="+15 Chance" enchant="15" />
7169+ <data level="156" type="+16 Chance" enchant="16" />
7170+ <data level="157" type="+17 Chance" enchant="17" />
7171+ <data level="158" type="+18 Chance" enchant="18" />
7172+ <data level="159" type="+19 Chance" enchant="19" />
7173+ <data level="160" type="+20 Chance" enchant="20" />
7174+ <data level="161" type="+21 Chance" enchant="21" />
7175+ <data level="162" type="+22 Chance" enchant="22" />
7176+ <data level="163" type="+23 Chance" enchant="23" />
7177+ <data level="164" type="+24 Chance" enchant="24" />
7178+ <data level="165" type="+25 Chance" enchant="25" />
7179+ <data level="166" type="+26 Chance" enchant="26" />
7180+ <data level="167" type="+27 Chance" enchant="27" />
7181+ <data level="168" type="+28 Chance" enchant="28" />
7182+ <data level="169" type="+29 Chance" enchant="29" />
7183+ <data level="170" type="+30 Chance" enchant="30" />
7184+ </enchant>
7185+
7186+ <!-- Mass Gloom -->
7187+ <enchant id="1382" name="Mass Gloom" baseLvl="5">
7188+ <data level="101" type="+1 Cost" enchant="1" />
7189+ <data level="102" type="+2 Cost" enchant="2" />
7190+ <data level="103" type="+3 Cost" enchant="3" />
7191+ <data level="104" type="+4 Cost" enchant="4" />
7192+ <data level="105" type="+5 Cost" enchant="5" />
7193+ <data level="106" type="+6 Cost" enchant="6" />
7194+ <data level="107" type="+7 Cost" enchant="7" />
7195+ <data level="108" type="+8 Cost" enchant="8" />
7196+ <data level="109" type="+9 Cost" enchant="9" />
7197+ <data level="110" type="+10 Cost" enchant="10" />
7198+ <data level="111" type="+11 Cost" enchant="11" />
7199+ <data level="112" type="+12 Cost" enchant="12" />
7200+ <data level="113" type="+13 Cost" enchant="13" />
7201+ <data level="114" type="+14 Cost" enchant="14" />
7202+ <data level="115" type="+15 Cost" enchant="15" />
7203+ <data level="116" type="+16 Cost" enchant="16" />
7204+ <data level="117" type="+17 Cost" enchant="17" />
7205+ <data level="118" type="+18 Cost" enchant="18" />
7206+ <data level="119" type="+19 Cost" enchant="19" />
7207+ <data level="120" type="+20 Cost" enchant="20" />
7208+ <data level="121" type="+21 Cost" enchant="21" />
7209+ <data level="122" type="+22 Cost" enchant="22" />
7210+ <data level="123" type="+23 Cost" enchant="23" />
7211+ <data level="124" type="+24 Cost" enchant="24" />
7212+ <data level="125" type="+25 Cost" enchant="25" />
7213+ <data level="126" type="+26 Cost" enchant="26" />
7214+ <data level="127" type="+27 Cost" enchant="27" />
7215+ <data level="128" type="+28 Cost" enchant="28" />
7216+ <data level="129" type="+29 Cost" enchant="29" />
7217+ <data level="130" type="+30 Cost" enchant="30" />
7218+ <data level="141" type="+1 Chance" enchant="1" />
7219+ <data level="142" type="+2 Chance" enchant="2" />
7220+ <data level="143" type="+3 Chance" enchant="3" />
7221+ <data level="144" type="+4 Chance" enchant="4" />
7222+ <data level="145" type="+5 Chance" enchant="5" />
7223+ <data level="146" type="+6 Chance" enchant="6" />
7224+ <data level="147" type="+7 Chance" enchant="7" />
7225+ <data level="148" type="+8 Chance" enchant="8" />
7226+ <data level="149" type="+9 Chance" enchant="9" />
7227+ <data level="150" type="+10 Chance" enchant="10" />
7228+ <data level="151" type="+11 Chance" enchant="11" />
7229+ <data level="152" type="+12 Chance" enchant="12" />
7230+ <data level="153" type="+13 Chance" enchant="13" />
7231+ <data level="154" type="+14 Chance" enchant="14" />
7232+ <data level="155" type="+15 Chance" enchant="15" />
7233+ <data level="156" type="+16 Chance" enchant="16" />
7234+ <data level="157" type="+17 Chance" enchant="17" />
7235+ <data level="158" type="+18 Chance" enchant="18" />
7236+ <data level="159" type="+19 Chance" enchant="19" />
7237+ <data level="160" type="+20 Chance" enchant="20" />
7238+ <data level="161" type="+21 Chance" enchant="21" />
7239+ <data level="162" type="+22 Chance" enchant="22" />
7240+ <data level="163" type="+23 Chance" enchant="23" />
7241+ <data level="164" type="+24 Chance" enchant="24" />
7242+ <data level="165" type="+25 Chance" enchant="25" />
7243+ <data level="166" type="+26 Chance" enchant="26" />
7244+ <data level="167" type="+27 Chance" enchant="27" />
7245+ <data level="168" type="+28 Chance" enchant="28" />
7246+ <data level="169" type="+29 Chance" enchant="29" />
7247+ <data level="170" type="+30 Chance" enchant="30" />
7248+ </enchant>
7249+
7250 <!-- Trance -->
7251 <enchant id="1394" name="Trance" baseLvl="10">
7252 <data level="101" type="+1 Cost" enchant="1" />