Sync with L2jServer HighFive Jul 14th 2015.
This commit is contained in:
parent
54754b81b2
commit
b07f46dc5c
@ -18,12 +18,12 @@
|
||||
*/
|
||||
package custom.events.Elpies;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
||||
import com.l2jserver.gameserver.datatables.SpawnTable;
|
||||
import com.l2jserver.gameserver.model.L2Spawn;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2EventMonsterInstance;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
@ -64,8 +64,8 @@ public final class Elpies extends Event
|
||||
// @formatter:on
|
||||
// Non-final variables
|
||||
private static boolean EVENT_ACTIVE = false;
|
||||
private static int CURRENT_ELPY_COUNT = 0;
|
||||
private ScheduledFuture<?> _eventTask = null;
|
||||
private final Set<L2Npc> _elpies = ConcurrentHashMap.newKeySet(ELPY_AMOUNT);
|
||||
|
||||
private Elpies()
|
||||
{
|
||||
@ -101,13 +101,11 @@ public final class Elpies extends Event
|
||||
EventLocation[] locations = EventLocation.values();
|
||||
EventLocation randomLoc = locations[getRandom(locations.length)];
|
||||
|
||||
CURRENT_ELPY_COUNT = 0;
|
||||
long despawnDelay = EVENT_DURATION_MINUTES * 60000;
|
||||
|
||||
for (int i = 0; i < ELPY_AMOUNT; i++)
|
||||
{
|
||||
addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay);
|
||||
CURRENT_ELPY_COUNT++;
|
||||
_elpies.add(addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay));
|
||||
}
|
||||
|
||||
Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
|
||||
@ -139,14 +137,11 @@ public final class Elpies extends Event
|
||||
_eventTask = null;
|
||||
}
|
||||
|
||||
for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(ELPY))
|
||||
for (L2Npc npc : _elpies)
|
||||
{
|
||||
L2Npc npc = spawn.getLastSpawn();
|
||||
if (npc != null)
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
npc.deleteMe();
|
||||
}
|
||||
_elpies.clear();
|
||||
|
||||
Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
|
||||
Broadcast.toAllOnlinePlayers("Elpy Event finished!");
|
||||
@ -158,11 +153,12 @@ public final class Elpies extends Event
|
||||
{
|
||||
if (EVENT_ACTIVE)
|
||||
{
|
||||
_elpies.remove(npc);
|
||||
|
||||
dropItem(npc, killer, DROPLIST_CONSUMABLES);
|
||||
dropItem(npc, killer, DROPLIST_CRYSTALS);
|
||||
CURRENT_ELPY_COUNT--;
|
||||
|
||||
if (CURRENT_ELPY_COUNT <= 0)
|
||||
if (_elpies.isEmpty())
|
||||
{
|
||||
Broadcast.toAllOnlinePlayers("All elpies have been killed!");
|
||||
eventStop();
|
||||
|
@ -20,7 +20,8 @@ package custom.events.Rabbits;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.model.L2Object;
|
||||
@ -51,7 +52,7 @@ public final class Rabbits extends Event
|
||||
private static final int EVENT_TIME = 10;
|
||||
private static final int TOTAL_CHEST_COUNT = 75;
|
||||
private static final int TRANSFORMATION_ID = 105;
|
||||
private final List<L2Npc> _npcs = new CopyOnWriteArrayList<>();
|
||||
private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet(TOTAL_CHEST_COUNT + 1);
|
||||
private final List<L2PcInstance> _players = new ArrayList<>();
|
||||
private boolean _isActive = false;
|
||||
|
||||
@ -142,16 +143,13 @@ public final class Rabbits extends Event
|
||||
// Despawn NPCs
|
||||
for (L2Npc npc : _npcs)
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
npc.deleteMe();
|
||||
}
|
||||
_npcs.clear();
|
||||
|
||||
for (L2PcInstance player : _players)
|
||||
{
|
||||
if ((player != null) && (player.getTransformationId() == TRANSFORMATION_ID))
|
||||
if (player.getTransformationId() == TRANSFORMATION_ID)
|
||||
{
|
||||
player.untransform();
|
||||
}
|
||||
@ -213,7 +211,7 @@ public final class Rabbits extends Event
|
||||
npc.deleteMe();
|
||||
_npcs.remove(npc);
|
||||
|
||||
if (_npcs.size() <= 1)
|
||||
if (_npcs.isEmpty())
|
||||
{
|
||||
Broadcast.toAllOnlinePlayers("Rabbits Event: No more chests...");
|
||||
eventStop();
|
||||
@ -253,7 +251,7 @@ public final class Rabbits extends Event
|
||||
}
|
||||
}
|
||||
|
||||
private static void recordSpawn(List<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
||||
private static void recordSpawn(Set<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
||||
{
|
||||
final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
|
||||
if (npc.getId() == CHEST)
|
||||
|
@ -18,9 +18,8 @@
|
||||
*/
|
||||
package custom.events.Race;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
@ -43,11 +42,11 @@ import com.l2jserver.gameserver.util.Broadcast;
|
||||
public final class Race extends Event
|
||||
{
|
||||
// Event NPC's list
|
||||
private List<L2Npc> _npclist;
|
||||
private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet();
|
||||
// Npc
|
||||
private L2Npc _npc;
|
||||
// Player list
|
||||
private List<L2PcInstance> _players;
|
||||
private final Set<L2PcInstance> _players = ConcurrentHashMap.newKeySet();
|
||||
// Event Task
|
||||
ScheduledFuture<?> _eventTask = null;
|
||||
// Event state
|
||||
@ -121,6 +120,7 @@ public final class Race extends Event
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check Custom Table - we use custom NPC's
|
||||
if (!Config.CUSTOM_NPC_DATA)
|
||||
{
|
||||
@ -128,9 +128,7 @@ public final class Race extends Event
|
||||
eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
|
||||
return false;
|
||||
}
|
||||
// Initialize list
|
||||
_npclist = new ArrayList<>();
|
||||
_players = new CopyOnWriteArrayList<>();
|
||||
|
||||
// Set Event active
|
||||
_isactive = true;
|
||||
// Spawn Manager
|
||||
@ -168,7 +166,7 @@ public final class Race extends Event
|
||||
// Transform players and send message
|
||||
for (L2PcInstance player : _players)
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
if (player.isOnline())
|
||||
{
|
||||
if (player.isInsideRadius(_npc, 500, false, false))
|
||||
{
|
||||
@ -210,22 +208,19 @@ public final class Race extends Event
|
||||
// Teleport to event start point
|
||||
for (L2PcInstance player : _players)
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
if (player.isOnline())
|
||||
{
|
||||
player.untransform();
|
||||
player.teleToLocation(_npc.getX(), _npc.getY(), _npc.getZ(), true);
|
||||
}
|
||||
}
|
||||
// Despawn NPCs
|
||||
for (L2Npc _npc : _npclist)
|
||||
{
|
||||
if (_npc != null)
|
||||
{
|
||||
_npc.deleteMe();
|
||||
}
|
||||
}
|
||||
_npclist.clear();
|
||||
_players.clear();
|
||||
// Despawn NPCs
|
||||
for (L2Npc _npc : _npcs)
|
||||
{
|
||||
_npc.deleteMe();
|
||||
}
|
||||
_npcs.clear();
|
||||
// Announce event end
|
||||
Broadcast.toAllOnlinePlayers("* Race Event finished *");
|
||||
|
||||
@ -356,10 +351,7 @@ public final class Race extends Event
|
||||
private L2Npc recordSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
||||
{
|
||||
final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
|
||||
if (npc != null)
|
||||
{
|
||||
_npclist.add(npc);
|
||||
}
|
||||
_npcs.add(npc);
|
||||
return npc;
|
||||
}
|
||||
|
||||
|
@ -89,6 +89,15 @@ public final class Q00421_LittleWingsBigAdventure extends Quest
|
||||
@Override
|
||||
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
|
||||
{
|
||||
if ("DESPAWN_GUARDIAN".equals(event))
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
return super.onAdvEvent(event, npc, player);
|
||||
}
|
||||
|
||||
final QuestState qs = getQuestState(player, false);
|
||||
String htmltext = null;
|
||||
if (qs == null)
|
||||
@ -172,14 +181,6 @@ public final class Q00421_LittleWingsBigAdventure extends Quest
|
||||
htmltext = event;
|
||||
break;
|
||||
}
|
||||
case "DESPAWN_GUARDIAN":
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
return htmltext;
|
||||
}
|
||||
|
@ -18,12 +18,12 @@
|
||||
*/
|
||||
package custom.events.Elpies;
|
||||
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
||||
import com.l2jserver.gameserver.datatables.SpawnTable;
|
||||
import com.l2jserver.gameserver.model.L2Spawn;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2EventMonsterInstance;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
@ -64,8 +64,8 @@ public final class Elpies extends Event
|
||||
// @formatter:on
|
||||
// Non-final variables
|
||||
private static boolean EVENT_ACTIVE = false;
|
||||
private static int CURRENT_ELPY_COUNT = 0;
|
||||
private ScheduledFuture<?> _eventTask = null;
|
||||
private final Set<L2Npc> _elpies = ConcurrentHashMap.newKeySet(ELPY_AMOUNT);
|
||||
|
||||
private Elpies()
|
||||
{
|
||||
@ -101,13 +101,11 @@ public final class Elpies extends Event
|
||||
EventLocation[] locations = EventLocation.values();
|
||||
EventLocation randomLoc = locations[getRandom(locations.length)];
|
||||
|
||||
CURRENT_ELPY_COUNT = 0;
|
||||
long despawnDelay = EVENT_DURATION_MINUTES * 60000;
|
||||
|
||||
for (int i = 0; i < ELPY_AMOUNT; i++)
|
||||
{
|
||||
addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay);
|
||||
CURRENT_ELPY_COUNT++;
|
||||
_elpies.add(addSpawn(ELPY, randomLoc.getRandomX(), randomLoc.getRandomY(), randomLoc.getZ(), 0, true, despawnDelay));
|
||||
}
|
||||
|
||||
Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
|
||||
@ -139,14 +137,11 @@ public final class Elpies extends Event
|
||||
_eventTask = null;
|
||||
}
|
||||
|
||||
for (L2Spawn spawn : SpawnTable.getInstance().getSpawns(ELPY))
|
||||
for (L2Npc npc : _elpies)
|
||||
{
|
||||
L2Npc npc = spawn.getLastSpawn();
|
||||
if (npc != null)
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
npc.deleteMe();
|
||||
}
|
||||
_elpies.clear();
|
||||
|
||||
Broadcast.toAllOnlinePlayers("*Squeak Squeak*");
|
||||
Broadcast.toAllOnlinePlayers("Elpy Event finished!");
|
||||
@ -158,11 +153,12 @@ public final class Elpies extends Event
|
||||
{
|
||||
if (EVENT_ACTIVE)
|
||||
{
|
||||
_elpies.remove(npc);
|
||||
|
||||
dropItem(npc, killer, DROPLIST_CONSUMABLES);
|
||||
dropItem(npc, killer, DROPLIST_CRYSTALS);
|
||||
CURRENT_ELPY_COUNT--;
|
||||
|
||||
if (CURRENT_ELPY_COUNT <= 0)
|
||||
if (_elpies.isEmpty())
|
||||
{
|
||||
Broadcast.toAllOnlinePlayers("All elpies have been killed!");
|
||||
eventStop();
|
||||
|
@ -20,7 +20,8 @@ package custom.events.Rabbits;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.model.L2Object;
|
||||
@ -51,7 +52,7 @@ public final class Rabbits extends Event
|
||||
private static final int EVENT_TIME = 10;
|
||||
private static final int TOTAL_CHEST_COUNT = 75;
|
||||
private static final int TRANSFORMATION_ID = 105;
|
||||
private final List<L2Npc> _npcs = new CopyOnWriteArrayList<>();
|
||||
private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet(TOTAL_CHEST_COUNT + 1);
|
||||
private final List<L2PcInstance> _players = new ArrayList<>();
|
||||
private boolean _isActive = false;
|
||||
|
||||
@ -142,16 +143,13 @@ public final class Rabbits extends Event
|
||||
// Despawn NPCs
|
||||
for (L2Npc npc : _npcs)
|
||||
{
|
||||
if (npc != null)
|
||||
{
|
||||
npc.deleteMe();
|
||||
}
|
||||
npc.deleteMe();
|
||||
}
|
||||
_npcs.clear();
|
||||
|
||||
for (L2PcInstance player : _players)
|
||||
{
|
||||
if ((player != null) && (player.getTransformationId() == TRANSFORMATION_ID))
|
||||
if (player.getTransformationId() == TRANSFORMATION_ID)
|
||||
{
|
||||
player.untransform();
|
||||
}
|
||||
@ -213,7 +211,7 @@ public final class Rabbits extends Event
|
||||
npc.deleteMe();
|
||||
_npcs.remove(npc);
|
||||
|
||||
if (_npcs.size() <= 1)
|
||||
if (_npcs.isEmpty())
|
||||
{
|
||||
Broadcast.toAllOnlinePlayers("Rabbits Event: No more chests...");
|
||||
eventStop();
|
||||
@ -253,7 +251,7 @@ public final class Rabbits extends Event
|
||||
}
|
||||
}
|
||||
|
||||
private static void recordSpawn(List<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
||||
private static void recordSpawn(Set<L2Npc> npcs, int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
||||
{
|
||||
final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
|
||||
if (npc.getId() == CHEST)
|
||||
|
@ -18,15 +18,13 @@
|
||||
*/
|
||||
package custom.events.Race;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ScheduledFuture;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.ThreadPoolManager;
|
||||
import com.l2jserver.gameserver.datatables.SkillData;
|
||||
import com.l2jserver.gameserver.enums.ChatType;
|
||||
import com.l2jserver.gameserver.model.actor.L2Npc;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
import com.l2jserver.gameserver.model.quest.Event;
|
||||
@ -43,11 +41,11 @@ import com.l2jserver.gameserver.util.Broadcast;
|
||||
public final class Race extends Event
|
||||
{
|
||||
// Event NPC's list
|
||||
private List<L2Npc> _npclist;
|
||||
private final Set<L2Npc> _npcs = ConcurrentHashMap.newKeySet();
|
||||
// Npc
|
||||
private L2Npc _npc;
|
||||
// Player list
|
||||
private List<L2PcInstance> _players;
|
||||
private final Set<L2PcInstance> _players = ConcurrentHashMap.newKeySet();
|
||||
// Event Task
|
||||
ScheduledFuture<?> _eventTask = null;
|
||||
// Event state
|
||||
@ -121,6 +119,7 @@ public final class Race extends Event
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check Custom Table - we use custom NPC's
|
||||
if (!Config.CUSTOM_NPC_DATA)
|
||||
{
|
||||
@ -128,9 +127,7 @@ public final class Race extends Event
|
||||
eventMaker.sendMessage("Event " + getName() + " can't be started because custom NPC table is disabled!");
|
||||
return false;
|
||||
}
|
||||
// Initialize list
|
||||
_npclist = new ArrayList<>();
|
||||
_players = new CopyOnWriteArrayList<>();
|
||||
|
||||
// Set Event active
|
||||
_isactive = true;
|
||||
// Spawn Manager
|
||||
@ -168,7 +165,7 @@ public final class Race extends Event
|
||||
// Transform players and send message
|
||||
for (L2PcInstance player : _players)
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
if (player.isOnline())
|
||||
{
|
||||
if (player.isInsideRadius(_npc, 500, false, false))
|
||||
{
|
||||
@ -210,22 +207,19 @@ public final class Race extends Event
|
||||
// Teleport to event start point
|
||||
for (L2PcInstance player : _players)
|
||||
{
|
||||
if ((player != null) && player.isOnline())
|
||||
if (player.isOnline())
|
||||
{
|
||||
player.untransform();
|
||||
player.teleToLocation(_npc.getX(), _npc.getY(), _npc.getZ(), true);
|
||||
}
|
||||
}
|
||||
// Despawn NPCs
|
||||
for (L2Npc _npc : _npclist)
|
||||
{
|
||||
if (_npc != null)
|
||||
{
|
||||
_npc.deleteMe();
|
||||
}
|
||||
}
|
||||
_npclist.clear();
|
||||
_players.clear();
|
||||
// Despawn NPCs
|
||||
for (L2Npc _npc : _npcs)
|
||||
{
|
||||
_npc.deleteMe();
|
||||
}
|
||||
_npcs.clear();
|
||||
// Announce event end
|
||||
Broadcast.toAllOnlinePlayers("* Race Event finished *");
|
||||
|
||||
@ -356,10 +350,7 @@ public final class Race extends Event
|
||||
private L2Npc recordSpawn(int npcId, int x, int y, int z, int heading, boolean randomOffSet, long despawnDelay)
|
||||
{
|
||||
final L2Npc npc = addSpawn(npcId, x, y, z, heading, randomOffSet, despawnDelay);
|
||||
if (npc != null)
|
||||
{
|
||||
_npclist.add(npc);
|
||||
}
|
||||
_npcs.add(npc);
|
||||
return npc;
|
||||
}
|
||||
|
||||
|
2
trunk/dist/tools/sql/game/characters.sql
vendored
2
trunk/dist/tools/sql/game/characters.sql
vendored
@ -54,7 +54,7 @@ CREATE TABLE IF NOT EXISTS `characters` (
|
||||
`bookmarkslot` SMALLINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
`vitality_points` int(10) NOT NULL DEFAULT '140000',
|
||||
`pccafe_points` int(6) DEFAULT NULL,
|
||||
`createDate` date NOT NULL DEFAULT '0000-00-00',
|
||||
`createDate` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`language` VARCHAR(2) DEFAULT NULL,
|
||||
`faction` TINYINT UNSIGNED NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`charId`),
|
||||
|
@ -67,7 +67,7 @@ public class OfflineTradersTable
|
||||
{
|
||||
try
|
||||
{
|
||||
if ((pc.getPrivateStoreType() != PrivateStoreType.NONE) && ((pc.getClient() == null) || pc.getClient().isDetached()))
|
||||
if ((pc.getPrivateStoreType() != PrivateStoreType.NONE) && pc.isInOfflineMode())
|
||||
{
|
||||
stm3.setInt(1, pc.getObjectId()); // Char Id
|
||||
stm3.setLong(2, pc.getOfflineStartTime());
|
||||
|
@ -976,7 +976,7 @@ public final class SkillTreesData implements IXmlReader
|
||||
final Skill oldSkill = clan.getSkills().get(skill.getSkillId());
|
||||
if (oldSkill != null)
|
||||
{
|
||||
if (oldSkill.getLevel() < skill.getSkillLevel())
|
||||
if ((oldSkill.getLevel() + 1) == skill.getSkillLevel())
|
||||
{
|
||||
result.add(skill);
|
||||
}
|
||||
|
@ -30,7 +30,6 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -65,9 +64,9 @@ public final class GrandBossManager implements IStorable
|
||||
|
||||
protected static Map<Integer, StatsSet> _storedInfo = new HashMap<>();
|
||||
|
||||
private final Map<Integer, Integer> _bossStatus = new HashMap<>();
|
||||
private final Map<Integer, Integer> _bossStatus = new ConcurrentHashMap<>();
|
||||
|
||||
private final List<L2BossZone> _zones = new CopyOnWriteArrayList<>();
|
||||
private final Map<Integer, L2BossZone> _zones = new ConcurrentHashMap<>();
|
||||
|
||||
protected GrandBossManager()
|
||||
{
|
||||
@ -124,21 +123,10 @@ public final class GrandBossManager implements IStorable
|
||||
*/
|
||||
public void initZones()
|
||||
{
|
||||
Map<Integer, List<Integer>> zones = new HashMap<>();
|
||||
|
||||
if (_zones == null)
|
||||
final Map<Integer, List<Integer>> zones = new HashMap<>();
|
||||
for (Integer zoneId : _zones.keySet())
|
||||
{
|
||||
_log.warning(getClass().getSimpleName() + ": Could not read Grand Boss zone data");
|
||||
return;
|
||||
}
|
||||
|
||||
for (L2BossZone zone : _zones)
|
||||
{
|
||||
if (zone == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
zones.put(zone.getId(), new ArrayList<>());
|
||||
zones.put(zoneId, new ArrayList<>());
|
||||
}
|
||||
|
||||
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
|
||||
@ -148,8 +136,8 @@ public final class GrandBossManager implements IStorable
|
||||
while (rs.next())
|
||||
{
|
||||
int id = rs.getInt("player_id");
|
||||
int zone_id = rs.getInt("zone");
|
||||
zones.get(zone_id).add(id);
|
||||
int zoneId = rs.getInt("zone");
|
||||
zones.get(zoneId).add(id);
|
||||
}
|
||||
_log.info(getClass().getSimpleName() + ": Initialized " + _zones.size() + " Grand Boss Zones");
|
||||
}
|
||||
@ -162,13 +150,9 @@ public final class GrandBossManager implements IStorable
|
||||
_log.log(Level.WARNING, "Error while initializing GrandBoss zones: " + e.getMessage(), e);
|
||||
}
|
||||
|
||||
for (L2BossZone zone : _zones)
|
||||
for (Entry<Integer, L2BossZone> e : _zones.entrySet())
|
||||
{
|
||||
if (zone == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
zone.setAllowedPlayers(zones.get(zone.getId()));
|
||||
e.getValue().setAllowedPlayers(zones.get(e.getKey()));
|
||||
}
|
||||
|
||||
zones.clear();
|
||||
@ -176,86 +160,38 @@ public final class GrandBossManager implements IStorable
|
||||
|
||||
public void addZone(L2BossZone zone)
|
||||
{
|
||||
if (_zones != null)
|
||||
{
|
||||
_zones.add(zone);
|
||||
}
|
||||
_zones.put(zone.getId(), zone);
|
||||
}
|
||||
|
||||
public final L2BossZone getZone(int zoneId)
|
||||
public L2BossZone getZone(int zoneId)
|
||||
{
|
||||
if (_zones != null)
|
||||
{
|
||||
for (L2BossZone temp : _zones)
|
||||
{
|
||||
if (temp.getId() == zoneId)
|
||||
{
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return _zones.get(zoneId);
|
||||
}
|
||||
|
||||
public final L2BossZone getZone(L2Character character)
|
||||
public L2BossZone getZone(L2Character character)
|
||||
{
|
||||
if (_zones != null)
|
||||
{
|
||||
for (L2BossZone temp : _zones)
|
||||
{
|
||||
if (temp.isCharacterInZone(character))
|
||||
{
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return _zones.values().stream().filter(z -> z.isCharacterInZone(character)).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
public final L2BossZone getZone(Location loc)
|
||||
public L2BossZone getZone(Location loc)
|
||||
{
|
||||
return getZone(loc.getX(), loc.getY(), loc.getZ());
|
||||
}
|
||||
|
||||
public final L2BossZone getZone(int x, int y, int z)
|
||||
public L2BossZone getZone(int x, int y, int z)
|
||||
{
|
||||
if (_zones != null)
|
||||
{
|
||||
for (L2BossZone temp : _zones)
|
||||
{
|
||||
if (temp.isInsideZone(x, y, z))
|
||||
{
|
||||
return temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
return _zones.values().stream().filter(zone -> zone.isInsideZone(x, y, z)).findFirst().orElse(null);
|
||||
}
|
||||
|
||||
public boolean checkIfInZone(String zoneType, L2Object obj)
|
||||
{
|
||||
L2BossZone temp = getZone(obj.getX(), obj.getY(), obj.getZ());
|
||||
if (temp == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return temp.getName().equalsIgnoreCase(zoneType);
|
||||
final L2BossZone temp = getZone(obj.getX(), obj.getY(), obj.getZ());
|
||||
return (temp != null) && temp.getName().equalsIgnoreCase(zoneType);
|
||||
}
|
||||
|
||||
public boolean checkIfInZone(L2PcInstance player)
|
||||
{
|
||||
if (player == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
L2BossZone temp = getZone(player.getX(), player.getY(), player.getZ());
|
||||
if (temp == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return (player != null) && (getZone(player.getX(), player.getY(), player.getZ()) != null);
|
||||
}
|
||||
|
||||
public int getBossStatus(int bossId)
|
||||
@ -308,14 +244,9 @@ public final class GrandBossManager implements IStorable
|
||||
|
||||
try (PreparedStatement insert = con.prepareStatement(INSERT_GRAND_BOSS_LIST))
|
||||
{
|
||||
for (L2BossZone zone : _zones)
|
||||
for (Entry<Integer, L2BossZone> e : _zones.entrySet())
|
||||
{
|
||||
if (zone == null)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
Integer id = zone.getId();
|
||||
List<Integer> list = zone.getAllowedPlayers();
|
||||
List<Integer> list = e.getValue().getAllowedPlayers();
|
||||
if ((list == null) || list.isEmpty())
|
||||
{
|
||||
continue;
|
||||
@ -323,7 +254,7 @@ public final class GrandBossManager implements IStorable
|
||||
for (Integer player : list)
|
||||
{
|
||||
insert.setInt(1, player);
|
||||
insert.setInt(2, id);
|
||||
insert.setInt(2, e.getKey());
|
||||
insert.executeUpdate();
|
||||
insert.clearParameters();
|
||||
}
|
||||
@ -436,7 +367,7 @@ public final class GrandBossManager implements IStorable
|
||||
_zones.clear();
|
||||
}
|
||||
|
||||
public List<L2BossZone> getZones()
|
||||
public Map<Integer, L2BossZone> getZones()
|
||||
{
|
||||
return _zones;
|
||||
}
|
||||
|
@ -30,6 +30,7 @@ import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.CopyOnWriteArrayList;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.concurrent.atomic.AtomicInteger;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
@ -353,13 +354,14 @@ public class L2Clan implements IIdentifiable, INamable
|
||||
public void addClanMember(L2PcInstance player)
|
||||
{
|
||||
final L2ClanMember member = new L2ClanMember(this, player);
|
||||
// store in memory
|
||||
addClanMember(member);
|
||||
member.setPlayerInstance(player);
|
||||
addClanMember(member);
|
||||
|
||||
player.setClan(this);
|
||||
player.setPledgeClass(L2ClanMember.calculatePledgeClass(player));
|
||||
player.sendPacket(new PledgeShowMemberListUpdate(player));
|
||||
player.sendPacket(new PledgeSkillList(this));
|
||||
|
||||
addSkillEffects(player);
|
||||
|
||||
// Notify to scripts
|
||||
@ -466,9 +468,10 @@ public class L2Clan implements IIdentifiable, INamable
|
||||
{
|
||||
CastleManager.getInstance().removeCirclet(exMember, getCastleId());
|
||||
}
|
||||
if (exMember.isOnline())
|
||||
|
||||
final L2PcInstance player = exMember.getPlayerInstance();
|
||||
if (player != null)
|
||||
{
|
||||
L2PcInstance player = exMember.getPlayerInstance();
|
||||
if (!player.isNoble())
|
||||
{
|
||||
player.setTitle("");
|
||||
@ -479,7 +482,7 @@ public class L2Clan implements IIdentifiable, INamable
|
||||
if (player.isClanLeader())
|
||||
{
|
||||
SiegeManager.getInstance().removeSiegeSkills(player);
|
||||
player.setClanCreateExpiryTime(System.currentTimeMillis() + (Config.ALT_CLAN_CREATE_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
|
||||
player.setClanCreateExpiryTime(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_CREATE_DAYS));
|
||||
}
|
||||
// remove Clan skills from Player
|
||||
removeSkillEffects(player);
|
||||
@ -510,7 +513,7 @@ public class L2Clan implements IIdentifiable, INamable
|
||||
}
|
||||
else
|
||||
{
|
||||
removeMemberInDatabase(exMember, clanJoinExpiryTime, getLeaderId() == objectId ? System.currentTimeMillis() + (Config.ALT_CLAN_CREATE_DAYS * 86400000L) : 0);
|
||||
removeMemberInDatabase(exMember.getObjectId(), clanJoinExpiryTime, getLeaderId() == objectId ? System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_CREATE_DAYS) : 0);
|
||||
}
|
||||
|
||||
// Notify to scripts
|
||||
@ -1001,31 +1004,29 @@ public class L2Clan implements IIdentifiable, INamable
|
||||
}
|
||||
|
||||
/**
|
||||
* @param member the clan member to be removed.
|
||||
* @param clanJoinExpiryTime
|
||||
* @param clanCreateExpiryTime
|
||||
* Removes a clan member from this clan.
|
||||
* @param playerId the clan member object ID to be removed
|
||||
* @param clanJoinExpiryTime the time penalty for the player to join a new clan
|
||||
* @param clanCreateExpiryTime the time penalty for the player to create a new clan
|
||||
*/
|
||||
private void removeMemberInDatabase(L2ClanMember member, long clanJoinExpiryTime, long clanCreateExpiryTime)
|
||||
private void removeMemberInDatabase(int playerId, long clanJoinExpiryTime, long clanCreateExpiryTime)
|
||||
{
|
||||
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement ps1 = con.prepareStatement("UPDATE characters SET clanid=0, title=?, clan_join_expiry_time=?, clan_create_expiry_time=?, clan_privs=0, wantspeace=0, subpledge=0, lvl_joined_academy=0, apprentice=0, sponsor=0 WHERE charId=?");
|
||||
PreparedStatement ps2 = con.prepareStatement("UPDATE characters SET apprentice=0 WHERE apprentice=?");
|
||||
PreparedStatement ps3 = con.prepareStatement("UPDATE characters SET sponsor=0 WHERE sponsor=?"))
|
||||
{
|
||||
// Remove clan member.
|
||||
ps1.setString(1, "");
|
||||
ps1.setLong(2, clanJoinExpiryTime);
|
||||
ps1.setLong(3, clanCreateExpiryTime);
|
||||
ps1.setInt(4, member.getObjectId());
|
||||
ps1.setInt(4, playerId);
|
||||
ps1.execute();
|
||||
if (Config.DEBUG)
|
||||
{
|
||||
_log.fine("clan member removed in db: " + getId());
|
||||
}
|
||||
// Remove apprentice.
|
||||
ps2.setInt(1, member.getObjectId());
|
||||
ps2.setInt(1, playerId);
|
||||
ps2.execute();
|
||||
// Remove sponsor.
|
||||
ps3.setInt(1, member.getObjectId());
|
||||
ps3.setInt(1, playerId);
|
||||
ps3.execute();
|
||||
}
|
||||
catch (Exception e)
|
||||
|
@ -149,8 +149,8 @@ public class L2ClanMember
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if is online.
|
||||
* @return true, if is online
|
||||
* Verifies if the clan member is online.
|
||||
* @return {@code true} if is online
|
||||
*/
|
||||
public boolean isOnline()
|
||||
{
|
||||
@ -158,11 +158,7 @@ public class L2ClanMember
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (_player.getClient() == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (_player.getClient().isDetached())
|
||||
if (_player.isInOfflineMode())
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
@ -692,20 +692,23 @@ public class L2Party extends AbstractPlayerGroup
|
||||
target.addItem("Party", item, player, true);
|
||||
|
||||
// Send messages to other party members about reward
|
||||
if (item.getCount() > 1)
|
||||
if (item.getCount() > 0)
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
msg.addLong(item.getCount());
|
||||
broadcastToPartyMembers(target, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
broadcastToPartyMembers(target, msg);
|
||||
if (item.getCount() > 1)
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
msg.addLong(item.getCount());
|
||||
broadcastToPartyMembers(target, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(target.getName());
|
||||
msg.addItemName(item);
|
||||
broadcastToPartyMembers(target, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -730,20 +733,23 @@ public class L2Party extends AbstractPlayerGroup
|
||||
looter.addItem(spoil ? "Sweeper Party" : "Party", itemId, itemCount, target, true);
|
||||
|
||||
// Send messages to other party members about reward
|
||||
if (itemCount > 1)
|
||||
if (itemCount > 0)
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2_S_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
msg.addLong(itemCount);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
if (itemCount > 1)
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2_S_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S3_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
msg.addLong(itemCount);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
}
|
||||
else
|
||||
{
|
||||
SystemMessage msg = spoil ? SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2_BY_USING_SWEEPER) : SystemMessage.getSystemMessage(SystemMessageId.C1_HAS_OBTAINED_S2);
|
||||
msg.addString(looter.getName());
|
||||
msg.addItemName(itemId);
|
||||
broadcastToPartyMembers(looter, msg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1022,7 +1022,7 @@ public class L2Attackable extends L2Npc
|
||||
}
|
||||
|
||||
// Broadcast message if RaidBoss was defeated
|
||||
if (isRaid() && !isRaidMinion())
|
||||
if (isRaid() && !isRaidMinion() && (drop.getCount() > 0))
|
||||
{
|
||||
final SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.C1_DIED_AND_DROPPED_S3_S2_S);
|
||||
sm.addCharName(this);
|
||||
|
@ -19,10 +19,10 @@
|
||||
package com.l2jserver.gameserver.model.actor.instance;
|
||||
|
||||
import java.sql.Connection;
|
||||
import java.sql.Date;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.sql.Timestamp;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Calendar;
|
||||
@ -666,7 +666,7 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
// charges
|
||||
private final AtomicInteger _charges = new AtomicInteger();
|
||||
private ScheduledFuture<?> _chargeTask = null;
|
||||
private volatile ScheduledFuture<?> _chargeTask = null;
|
||||
|
||||
// Absorbed Souls
|
||||
private int _souls = 0;
|
||||
@ -4524,7 +4524,7 @@ public final class L2PcInstance extends L2Playable
|
||||
getAI().setIntention(CtrlIntention.AI_INTENTION_IDLE);
|
||||
|
||||
// Check if the L2Object to pick up is a L2ItemInstance
|
||||
if (!(object instanceof L2ItemInstance))
|
||||
if (!(object.isItem()))
|
||||
{
|
||||
// dont try to pickup anything that is not an item :)
|
||||
_log.warning(this + " trying to pickup wrong target." + getTarget());
|
||||
@ -4533,12 +4533,7 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
L2ItemInstance target = (L2ItemInstance) object;
|
||||
|
||||
// Send a Server->Client packet ActionFailed to this L2PcInstance
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
|
||||
// Send a Server->Client packet StopMove to this L2PcInstance
|
||||
StopMove sm = new StopMove(this);
|
||||
sendPacket(sm);
|
||||
sendPacket(new StopMove(this));
|
||||
|
||||
SystemMessage smsg = null;
|
||||
synchronized (target)
|
||||
@ -4567,12 +4562,8 @@ public final class L2PcInstance extends L2Playable
|
||||
return;
|
||||
}
|
||||
|
||||
if (isInvul() && !canOverrideCond(PcCondOverride.ITEM_CONDITIONS))
|
||||
if (isInvisible() && !canOverrideCond(PcCondOverride.ITEM_CONDITIONS))
|
||||
{
|
||||
sendPacket(ActionFailed.STATIC_PACKET);
|
||||
smsg = SystemMessage.getSystemMessage(SystemMessageId.YOU_HAVE_FAILED_TO_PICK_UP_S1);
|
||||
smsg.addItemName(target);
|
||||
sendPacket(smsg);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -6986,7 +6977,7 @@ public final class L2PcInstance extends L2Playable
|
||||
statement.setInt(34, getBaseClass());
|
||||
statement.setInt(35, isNoble() ? 1 : 0);
|
||||
statement.setLong(36, 0);
|
||||
statement.setDate(37, new Date(getCreateDate().getTimeInMillis()));
|
||||
statement.setTimestamp(37, new Timestamp(getCreateDate().getTimeInMillis()));
|
||||
statement.executeUpdate();
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -7182,7 +7173,7 @@ public final class L2PcInstance extends L2Playable
|
||||
player.setPcBangPoints(rset.getInt("pccafe_points"));
|
||||
|
||||
// character creation Time
|
||||
player.getCreateDate().setTime(rset.getDate("createDate"));
|
||||
player.getCreateDate().setTimeInMillis(rset.getTimestamp("createDate").getTime());
|
||||
|
||||
// Language
|
||||
player.setLang(rset.getString("language"));
|
||||
@ -7841,13 +7832,25 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
public int isOnlineInt()
|
||||
{
|
||||
if (_isOnline && (getClient() != null))
|
||||
if (_isOnline && (_client != null))
|
||||
{
|
||||
return getClient().isDetached() ? 2 : 1;
|
||||
return _client.isDetached() ? 2 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Verifies if the player is in offline mode.<br>
|
||||
* The offline mode may happen for different reasons:<br>
|
||||
* Abnormally: Player gets abrouptaly disconnected from server.<br>
|
||||
* Normally: The player gets into offline shop mode, only avaiable by enabling the offline shop mod.
|
||||
* @return {@code true} if the player is in offline mode, {@code false} otherwise
|
||||
*/
|
||||
public boolean isInOfflineMode()
|
||||
{
|
||||
return (_client == null) || _client.isDetached();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Skill addSkill(Skill newSkill)
|
||||
{
|
||||
@ -10703,6 +10706,16 @@ public final class L2PcInstance extends L2Playable
|
||||
sendPacket(new SkillCoolTime(this));
|
||||
sendPacket(new ExStorageMaxCount(this));
|
||||
|
||||
// TODO: Fix with Support for Ertheia race.
|
||||
// if (Config.ALTERNATE_CLASS_MASTER)
|
||||
// {
|
||||
// if (Config.CLASS_MASTER_SETTINGS.isAllowed(getClassId().level() + 1) && Config.ALTERNATE_CLASS_MASTER && (((this.getClassId().level() == 1) && (this.getLevel() >= 40)) || ((this.getClassId().level() == 2) && (this.getLevel() >= 76)) || ((this.getClassId().level() == 3) &&
|
||||
// (this.getLevel() >= 85))))
|
||||
// {
|
||||
// L2ClassMasterInstance.showQuestionMark(this);
|
||||
// }
|
||||
// }
|
||||
|
||||
EventDispatcher.getInstance().notifyEventAsync(new OnPlayerSubChange(this), this);
|
||||
return true;
|
||||
}
|
||||
@ -12932,7 +12945,7 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
if (_transformSkills == null)
|
||||
{
|
||||
_transformSkills = new HashMap<>();
|
||||
_transformSkills = new ConcurrentHashMap<>();
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -12941,15 +12954,23 @@ public final class L2PcInstance extends L2Playable
|
||||
|
||||
public Skill getTransformSkill(int id)
|
||||
{
|
||||
if (_transformSkills == null)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
return _transformSkills.get(id);
|
||||
}
|
||||
|
||||
public boolean hasTransformSkill(int id)
|
||||
{
|
||||
if (_transformSkills == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
return _transformSkills.containsKey(id);
|
||||
}
|
||||
|
||||
public synchronized void removeAllTransformSkills()
|
||||
public void removeAllTransformSkills()
|
||||
{
|
||||
_transformSkills = null;
|
||||
}
|
||||
@ -13194,8 +13215,13 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
if (_chargeTask != null)
|
||||
{
|
||||
_chargeTask.cancel(false);
|
||||
_chargeTask = null;
|
||||
synchronized (this)
|
||||
{
|
||||
if (_chargeTask != null)
|
||||
{
|
||||
_chargeTask.cancel(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
_chargeTask = ThreadPoolManager.getInstance().scheduleGeneral(new ResetChargesTask(this), 600000);
|
||||
}
|
||||
@ -14161,9 +14187,9 @@ public final class L2PcInstance extends L2Playable
|
||||
{
|
||||
try
|
||||
{
|
||||
for (L2BossZone _zone : GrandBossManager.getInstance().getZones())
|
||||
for (L2BossZone zone : GrandBossManager.getInstance().getZones().values())
|
||||
{
|
||||
_zone.removePlayer(this);
|
||||
zone.removePlayer(this);
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
@ -14177,10 +14203,9 @@ public final class L2PcInstance extends L2Playable
|
||||
*/
|
||||
public void checkPlayerSkills()
|
||||
{
|
||||
L2SkillLearn learn;
|
||||
for (Entry<Integer, Skill> e : getSkills().entrySet())
|
||||
{
|
||||
learn = SkillTreesData.getInstance().getClassSkill(e.getKey(), e.getValue().getLevel() % 100, getClassId());
|
||||
final L2SkillLearn learn = SkillTreesData.getInstance().getClassSkill(e.getKey(), e.getValue().getLevel() % 100, getClassId());
|
||||
if (learn != null)
|
||||
{
|
||||
int lvlDiff = e.getKey() == CommonSkill.EXPERTISE.getId() ? 0 : 9;
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2004-2014 L2J Server
|
||||
* Copyright (C) 2004-2015 L2J Server
|
||||
*
|
||||
* This file is part of L2J Server.
|
||||
*
|
||||
|
@ -83,6 +83,6 @@ public class FuncAtkEvasion extends AbstractFunction
|
||||
value += (level - 69) + 2;
|
||||
}
|
||||
}
|
||||
return value;
|
||||
return (int) value;
|
||||
}
|
||||
}
|
@ -63,6 +63,7 @@ import com.l2jserver.gameserver.model.quest.State;
|
||||
import com.l2jserver.gameserver.model.zone.ZoneId;
|
||||
import com.l2jserver.gameserver.network.SystemMessageId;
|
||||
import com.l2jserver.gameserver.network.serverpackets.AcquireSkillList;
|
||||
import com.l2jserver.gameserver.network.serverpackets.ActionFailed;
|
||||
import com.l2jserver.gameserver.network.serverpackets.AllyCrest;
|
||||
import com.l2jserver.gameserver.network.serverpackets.Die;
|
||||
import com.l2jserver.gameserver.network.serverpackets.EtcStatusUpdate;
|
||||
@ -659,11 +660,11 @@ public class EnterWorld extends L2GameClientPacket
|
||||
|
||||
activeChar.sendPacket(new ExAcquireAPSkillList(activeChar));
|
||||
activeChar.sendPacket(new ExWorldChatCnt(activeChar));
|
||||
|
||||
// Unstuck players that had client open when server crashed.
|
||||
activeChar.sendPacket(ActionFailed.STATIC_PACKET);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param cha
|
||||
*/
|
||||
private void engage(L2PcInstance cha)
|
||||
{
|
||||
int chaId = cha.getObjectId();
|
||||
|
@ -87,7 +87,7 @@ public final class RequestAnswerJoinPledge extends L2GameClientPacket
|
||||
activeChar.setPledgeType(requestPacket.getPledgeType());
|
||||
if (requestPacket.getPledgeType() == L2Clan.SUBUNIT_ACADEMY)
|
||||
{
|
||||
activeChar.setPowerGrade(9); // adademy
|
||||
activeChar.setPowerGrade(9); // Academy
|
||||
activeChar.setLvlJoinedAcademy(activeChar.getLevel());
|
||||
}
|
||||
else
|
||||
|
@ -18,6 +18,8 @@
|
||||
*/
|
||||
package com.l2jserver.gameserver.network.clientpackets;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.model.ClanPrivilege;
|
||||
import com.l2jserver.gameserver.model.L2Clan;
|
||||
@ -83,8 +85,8 @@ public final class RequestOustPledgeMember extends L2GameClientPacket
|
||||
}
|
||||
|
||||
// this also updates the database
|
||||
clan.removeClanMember(member.getObjectId(), System.currentTimeMillis() + (Config.ALT_CLAN_JOIN_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
|
||||
clan.setCharPenaltyExpiryTime(System.currentTimeMillis() + (Config.ALT_CLAN_JOIN_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
|
||||
clan.removeClanMember(member.getObjectId(), System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_JOIN_DAYS));
|
||||
clan.setCharPenaltyExpiryTime(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_JOIN_DAYS));
|
||||
clan.updateClanInDB();
|
||||
|
||||
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.CLAN_MEMBER_S1_HAS_BEEN_EXPELLED);
|
||||
|
@ -18,6 +18,8 @@
|
||||
*/
|
||||
package com.l2jserver.gameserver.network.clientpackets;
|
||||
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.gameserver.model.L2Clan;
|
||||
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
|
||||
@ -66,7 +68,7 @@ public final class RequestWithdrawalPledge extends L2GameClientPacket
|
||||
|
||||
L2Clan clan = activeChar.getClan();
|
||||
|
||||
clan.removeClanMember(activeChar.getObjectId(), System.currentTimeMillis() + (Config.ALT_CLAN_JOIN_DAYS * 86400000L)); // 24*60*60*1000 = 86400000
|
||||
clan.removeClanMember(activeChar.getObjectId(), System.currentTimeMillis() + TimeUnit.DAYS.toMillis(Config.ALT_CLAN_JOIN_DAYS));
|
||||
|
||||
SystemMessage sm = SystemMessage.getSystemMessage(SystemMessageId.S1_HAS_WITHDRAWN_FROM_THE_CLAN);
|
||||
sm.addString(activeChar.getName());
|
||||
|
@ -22,32 +22,28 @@ import java.sql.Connection;
|
||||
import java.sql.PreparedStatement;
|
||||
import java.sql.ResultSet;
|
||||
import java.sql.SQLException;
|
||||
import java.util.Calendar;
|
||||
import java.util.GregorianCalendar;
|
||||
import java.util.logging.Level;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.l2jserver.Config;
|
||||
import com.l2jserver.L2DatabaseFactory;
|
||||
import com.l2jserver.gameserver.data.sql.impl.CharNameTable;
|
||||
import com.l2jserver.gameserver.enums.MailType;
|
||||
import com.l2jserver.gameserver.instancemanager.MailManager;
|
||||
import com.l2jserver.gameserver.model.entity.Message;
|
||||
import com.l2jserver.gameserver.model.itemcontainer.Mail;
|
||||
import com.l2jserver.gameserver.taskmanager.Task;
|
||||
import com.l2jserver.gameserver.taskmanager.TaskManager;
|
||||
import com.l2jserver.gameserver.taskmanager.TaskManager.ExecutedTask;
|
||||
import com.l2jserver.gameserver.taskmanager.TaskTypes;
|
||||
import com.l2jserver.gameserver.util.Util;
|
||||
|
||||
/**
|
||||
* @author Nyaran
|
||||
* Birthday Gift task.
|
||||
* @author Zoey76
|
||||
*/
|
||||
public class TaskBirthday extends Task
|
||||
{
|
||||
private static final String NAME = "birthday";
|
||||
private static final String QUERY = "SELECT charId, createDate FROM characters WHERE createDate LIKE ?";
|
||||
private static final Calendar _today = Calendar.getInstance();
|
||||
private int _count = 0;
|
||||
/** Get all players that have had a birthday since last check. */
|
||||
private static final String SELECT_PENDING_BIRTHDAY_GIFTS = "SELECT charId, char_name, createDate, (YEAR(NOW()) - YEAR(createDate)) AS age " //
|
||||
+ "FROM characters WHERE (YEAR(NOW()) - YEAR(createDate) > 0) AND (DATE_FORMAT(createDate, '%m-%d') > DATE_FORMAT(FROM_UNIXTIME(?), '%m-%d'))";
|
||||
|
||||
@Override
|
||||
public String getName()
|
||||
@ -58,85 +54,39 @@ public class TaskBirthday extends Task
|
||||
@Override
|
||||
public void onTimeElapsed(ExecutedTask task)
|
||||
{
|
||||
Calendar lastExecDate = Calendar.getInstance();
|
||||
long lastActivation = task.getLastActivation();
|
||||
// TODO(Zoey76): Fix first run.
|
||||
final int birthdayGiftCount = giveBirthdayGifts(task.getLastActivation());
|
||||
|
||||
if (lastActivation > 0)
|
||||
{
|
||||
lastExecDate.setTimeInMillis(lastActivation);
|
||||
}
|
||||
|
||||
String rangeDate = "[" + Util.getDateString(lastExecDate.getTime()) + "] - [" + Util.getDateString(_today.getTime()) + "]";
|
||||
|
||||
for (; !_today.before(lastExecDate); lastExecDate.add(Calendar.DATE, 1))
|
||||
{
|
||||
checkBirthday(lastExecDate.get(Calendar.YEAR), lastExecDate.get(Calendar.MONTH), lastExecDate.get(Calendar.DATE));
|
||||
}
|
||||
|
||||
_log.info("BirthdayManager: " + _count + " gifts sent. " + rangeDate);
|
||||
_log.info("BirthdayManager: " + birthdayGiftCount + " gifts sent.");
|
||||
}
|
||||
|
||||
private void checkBirthday(int year, int month, int day)
|
||||
private int giveBirthdayGifts(long lastActivation)
|
||||
{
|
||||
int birthdayGiftCount = 0;
|
||||
try (Connection con = L2DatabaseFactory.getInstance().getConnection();
|
||||
PreparedStatement statement = con.prepareStatement(QUERY))
|
||||
PreparedStatement ps = con.prepareStatement(SELECT_PENDING_BIRTHDAY_GIFTS))
|
||||
{
|
||||
statement.setString(1, "%-" + getNum(month + 1) + "-" + getNum(day));
|
||||
try (ResultSet rset = statement.executeQuery())
|
||||
ps.setLong(1, TimeUnit.SECONDS.convert(lastActivation, TimeUnit.MILLISECONDS));
|
||||
try (ResultSet rs = ps.executeQuery())
|
||||
{
|
||||
while (rset.next())
|
||||
while (rs.next())
|
||||
{
|
||||
int playerId = rset.getInt("charId");
|
||||
Calendar createDate = Calendar.getInstance();
|
||||
createDate.setTime(rset.getDate("createDate"));
|
||||
|
||||
int age = year - createDate.get(Calendar.YEAR);
|
||||
if (age <= 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
String text = Config.ALT_BIRTHDAY_MAIL_TEXT;
|
||||
text = text.replaceAll("$c1", rs.getString("char_name"));
|
||||
text = text.replaceAll("$s1", Integer.toString(rs.getInt("age")));
|
||||
|
||||
if (text.contains("$c1"))
|
||||
{
|
||||
text = text.replace("$c1", CharNameTable.getInstance().getNameById(playerId));
|
||||
}
|
||||
if (text.contains("$s1"))
|
||||
{
|
||||
text = text.replace("$s1", String.valueOf(age));
|
||||
}
|
||||
|
||||
Message msg = new Message(playerId, Config.ALT_BIRTHDAY_MAIL_SUBJECT, text, MailType.BIRTHDAY);
|
||||
|
||||
Mail attachments = msg.createAttachments();
|
||||
attachments.addItem("Birthday", Config.ALT_BIRTHDAY_GIFT, 1, null, null);
|
||||
|
||||
final Message msg = new Message(rs.getInt("charId"), Config.ALT_BIRTHDAY_MAIL_SUBJECT, text, MailType.BIRTHDAY);
|
||||
msg.createAttachments().addItem("Birthday", Config.ALT_BIRTHDAY_GIFT, 1, null, null);
|
||||
MailManager.getInstance().sendMessage(msg);
|
||||
_count++;
|
||||
birthdayGiftCount++;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (SQLException e)
|
||||
{
|
||||
_log.log(Level.WARNING, "Error checking birthdays. ", e);
|
||||
_log.warning("Error checking birthdays: " + e.getMessage());
|
||||
}
|
||||
|
||||
// If character birthday is 29-Feb and year isn't leap, send gift on 28-feb
|
||||
GregorianCalendar calendar = new GregorianCalendar();
|
||||
if ((month == Calendar.FEBRUARY) && (day == 28) && !calendar.isLeapYear(_today.get(Calendar.YEAR)))
|
||||
{
|
||||
checkBirthday(year, Calendar.FEBRUARY, 29);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param num the number to format.
|
||||
* @return the formatted number starting with a 0 if it is lower or equal than 10.
|
||||
*/
|
||||
private String getNum(int num)
|
||||
{
|
||||
return (num <= 9) ? "0" + num : String.valueOf(num);
|
||||
return birthdayGiftCount;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
Reference in New Issue
Block a user