Assorted code format changes.

This commit is contained in:
MobiusDevelopment
2020-06-14 02:36:44 +00:00
parent 8fcf2e964f
commit bf7c04f166
15 changed files with 78 additions and 73 deletions

View File

@@ -1,5 +1,5 @@
#=======================================================# #=======================================================#
# Oly Settings # # Olympiad Settings #
#=======================================================# #=======================================================#
# Olympiad Start Time in Military hours Default 6pm (18) # Olympiad Start Time in Military hours Default 6pm (18)

View File

@@ -968,11 +968,11 @@ public class Antharas extends Quest
final int countMPHerb = Rnd.get(6, 18); final int countMPHerb = Rnd.get(6, 18);
for (int i = 0; i < countHPHerb; i++) for (int i = 0; i < countHPHerb; i++)
{ {
((MonsterInstance) npc).DropItem(killer, 8602, 1); ((MonsterInstance) npc).dropItem(killer, 8602, 1);
} }
for (int i = 0; i < countMPHerb; i++) for (int i = 0; i < countMPHerb; i++)
{ {
((MonsterInstance) npc).DropItem(killer, 8605, 1); ((MonsterInstance) npc).dropItem(killer, 8605, 1);
} }
} }
if (_monsters.contains(npc)) if (_monsters.contains(npc))

View File

@@ -412,7 +412,7 @@ public class NewbieHelper extends Quest
} }
else if ((ex <= 2) && (qs1.getState() == State.STARTED) && (qs2.getInt("Gemstone") == 0) && (Rnd.get(100) < 50)) else if ((ex <= 2) && (qs1.getState() == State.STARTED) && (qs2.getInt("Gemstone") == 0) && (Rnd.get(100) < 50))
{ {
((MonsterInstance) npc).DropItem(player, BLUE_GEM, 1); ((MonsterInstance) npc).dropItem(player, BLUE_GEM, 1);
qs1.playSound("ItemSound.quest_tutorial"); qs1.playSound("ItemSound.quest_tutorial");
qs1.set("step", "1"); qs1.set("step", "1");
} }

View File

@@ -128,5 +128,3 @@ BrutAvgTime = 30
#Number of second, for ban IP address, who time BrutAvgTime less specified #Number of second, for ban IP address, who time BrutAvgTime less specified
#900 second = 15 minute #900 second = 15 minute
BrutBanIpTime = 900 BrutBanIpTime = 900
Assert = False
EnableAllExceptionsLog = False

View File

@@ -218,7 +218,7 @@ public class CursedWeapon
final SystemMessage sm = new SystemMessage(SystemMessageId.S2_WAS_DROPPED_IN_THE_S1_REGION); final SystemMessage sm = new SystemMessage(SystemMessageId.S2_WAS_DROPPED_IN_THE_S1_REGION);
if (fromMonster) if (fromMonster)
{ {
_item = attackable.DropItem(player, _itemId, 1); _item = attackable.dropItem(player, _itemId, 1);
_item.setDropTime(0); // Prevent item from being removed by ItemsAutoDestroy _item.setDropTime(0); // Prevent item from being removed by ItemsAutoDestroy
// RedSky and Earthquake // RedSky and Earthquake

View File

@@ -1849,7 +1849,7 @@ public class Attackable extends NpcInstance
} }
else if (!player.getInventory().validateCapacity(itemTemplate) || (!Config.AUTO_LOOT_BOSS && (this instanceof RaidBossInstance)) || (!Config.AUTO_LOOT_BOSS && (this instanceof GrandBossInstance))) else if (!player.getInventory().validateCapacity(itemTemplate) || (!Config.AUTO_LOOT_BOSS && (this instanceof RaidBossInstance)) || (!Config.AUTO_LOOT_BOSS && (this instanceof GrandBossInstance)))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -1858,7 +1858,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); // drop the item on the ground dropItem(player, item); // drop the item on the ground
} }
// Broadcast message if RaidBoss was defeated // Broadcast message if RaidBoss was defeated
@@ -1888,7 +1888,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -1897,7 +1897,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
} }
@@ -1919,7 +1919,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -1928,7 +1928,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
spec = true; spec = true;
} }
@@ -1963,7 +1963,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -1972,7 +1972,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
break; break;
} }
@@ -1989,7 +1989,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -1998,7 +1998,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
spec = true; spec = true;
} }
@@ -2027,7 +2027,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2036,7 +2036,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
break; break;
} }
@@ -2053,7 +2053,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2062,7 +2062,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
mp = true; mp = true;
@@ -2082,7 +2082,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2091,7 +2091,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
hp = true; hp = true;
} }
@@ -2107,7 +2107,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2116,7 +2116,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
hp = true; hp = true;
} }
@@ -2132,7 +2132,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2141,7 +2141,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
} }
} }
@@ -2158,7 +2158,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2167,7 +2167,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
mp = true; mp = true;
} }
@@ -2183,7 +2183,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2192,7 +2192,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
mp = true; mp = true;
} }
@@ -2208,7 +2208,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2217,7 +2217,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
} }
} }
@@ -2232,7 +2232,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2241,7 +2241,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); dropItem(player, item);
} }
} }
} }
@@ -2295,7 +2295,7 @@ public class Attackable extends NpcInstance
final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId()); final Item itemTemplate = ItemTable.getInstance().getTemplate(item.getItemId());
if (!player.getInventory().validateCapacity(itemTemplate)) if (!player.getInventory().validateCapacity(itemTemplate))
{ {
DropItem(player, item); dropItem(player, item);
} }
else else
{ {
@@ -2304,7 +2304,7 @@ public class Attackable extends NpcInstance
} }
else else
{ {
DropItem(player, item); // drop the item on the ground dropItem(player, item); // drop the item on the ground
} }
} }
} }
@@ -2316,8 +2316,14 @@ public class Attackable extends NpcInstance
* @param item * @param item
* @return * @return
*/ */
public ItemInstance DropItem(PlayerInstance mainDamageDealer, RewardItem item) public ItemInstance dropItem(PlayerInstance mainDamageDealer, RewardItem item)
{ {
// Make sure item template exists.
if (ItemTable.getInstance().getTemplate(item.getItemId()) == null)
{
return null;
}
final int randDropLim = 70; final int randDropLim = 70;
ItemInstance ditem = null; ItemInstance ditem = null;
for (int i = 0; i < item.getCount(); i++) for (int i = 0; i < item.getCount(); i++)
@@ -2349,9 +2355,9 @@ public class Attackable extends NpcInstance
return ditem; return ditem;
} }
public ItemInstance DropItem(PlayerInstance lastAttacker, int itemId, int itemCount) public ItemInstance dropItem(PlayerInstance lastAttacker, int itemId, int itemCount)
{ {
return DropItem(lastAttacker, new RewardItem(itemId, itemCount)); return dropItem(lastAttacker, new RewardItem(itemId, itemCount));
} }
/** /**

View File

@@ -51,11 +51,6 @@ public class GamePacketHandler implements IPacketHandler<GameClient>, IClientFac
} }
final int opcode = buf.get() & 0xFF; final int opcode = buf.get() & 0xFF;
int opcode2 = -1;
if ((opcode == 0xd0) && (buf.remaining() >= 2))
{
opcode2 = buf.getShort() & 0xffff;
}
ReceivablePacket<GameClient> msg = null; ReceivablePacket<GameClient> msg = null;
final ConnectionState state = client.getState(); final ConnectionState state = client.getState();
@@ -1053,11 +1048,17 @@ public class GamePacketHandler implements IPacketHandler<GameClient>, IClientFac
} }
case 0xd0: case 0xd0:
{ {
if (opcode2 == -1) int opcode2 = -1;
if (buf.remaining() >= 2)
{ {
LOGGER.warning("Client: " + client + " sent a 0xd0 without the second opcode."); opcode2 = buf.getShort() & 0xffff;
}
else
{
LOGGER.warning("Client: " + client.toString() + " sent a 0xd0 without the second opcode.");
break; break;
} }
switch (opcode2) switch (opcode2)
{ {
case 1: case 1:

View File

@@ -37,7 +37,7 @@ import org.l2jmobius.gameserver.script.ScriptEngine;
*/ */
public class FaenorEventParser extends FaenorParser public class FaenorEventParser extends FaenorParser
{ {
static Logger _log = Logger.getLogger(FaenorEventParser.class.getName()); private static final Logger LOGGER = Logger.getLogger(FaenorEventParser.class.getName());
private DateRange _eventDates = null; private DateRange _eventDates = null;
@Override @Override
@@ -49,13 +49,13 @@ public class FaenorEventParser extends FaenorParser
final Date currentDate = new Date(); final Date currentDate = new Date();
if (_eventDates.getEndDate().before(currentDate)) if (_eventDates.getEndDate().before(currentDate))
{ {
_log.info("Event ID: (" + id + ") has passed... Ignored."); LOGGER.info("Event ID: (" + id + ") has passed... Ignored.");
return; return;
} }
if (_eventDates.getStartDate().after(currentDate)) if (_eventDates.getStartDate().after(currentDate))
{ {
_log.info("Event ID: (" + id + ") is not active yet... Ignored."); LOGGER.info("Event ID: (" + id + ") is not active yet... Ignored.");
ThreadPool.schedule(() -> parseEventDropAndMessage(eventNode), _eventDates.getStartDate().getTime() - currentDate.getTime()); ThreadPool.schedule(() -> parseEventDropAndMessage(eventNode), _eventDates.getStartDate().getTime() - currentDate.getTime());
return; return;
} }
@@ -91,7 +91,7 @@ public class FaenorEventParser extends FaenorParser
} }
catch (Exception e) catch (Exception e)
{ {
_log.log(Level.WARNING, "Error in event parser: " + e.getMessage()); LOGGER.log(Level.WARNING, "Error in event parser: " + e.getMessage());
} }
} }
@@ -117,7 +117,7 @@ public class FaenorEventParser extends FaenorParser
} }
catch (Exception e) catch (Exception e)
{ {
_log.log(Level.WARNING, "ERROR(parseEventDrop):" + e.getMessage()); LOGGER.log(Level.WARNING, "ERROR(parseEventDrop):" + e.getMessage());
} }
} }

View File

@@ -33,7 +33,7 @@ import org.l2jmobius.gameserver.script.EventDroplist;
*/ */
public class FaenorInterface implements EngineInterface public class FaenorInterface implements EngineInterface
{ {
protected static final Logger _log = Logger.getLogger(FaenorInterface.class.getName()); protected static final Logger LOGGER = Logger.getLogger(FaenorInterface.class.getName());
public static FaenorInterface getInstance() public static FaenorInterface getInstance()
{ {

View File

@@ -31,7 +31,7 @@ import org.l2jmobius.gameserver.script.ScriptEngine;
*/ */
public class FaenorQuestParser extends FaenorParser public class FaenorQuestParser extends FaenorParser
{ {
protected static final Logger _log = Logger.getLogger(FaenorQuestParser.class.getName()); protected static final Logger LOGGER = Logger.getLogger(FaenorQuestParser.class.getName());
@Override @Override
public void parseScript(Node questNode, ScriptContext context) public void parseScript(Node questNode, ScriptContext context)

View File

@@ -39,7 +39,7 @@ import org.l2jmobius.gameserver.script.ScriptEngine;
*/ */
public class FaenorScriptEngine extends ScriptEngine public class FaenorScriptEngine extends ScriptEngine
{ {
private static final Logger _log = Logger.getLogger(FaenorScriptEngine.class.getName()); private static final Logger LOGGER = Logger.getLogger(FaenorScriptEngine.class.getName());
public static final String PACKAGE_DIRECTORY = "data/faenor/"; public static final String PACKAGE_DIRECTORY = "data/faenor/";
protected FaenorScriptEngine() protected FaenorScriptEngine()
@@ -56,7 +56,7 @@ public class FaenorScriptEngine extends ScriptEngine
} }
catch (IOException e) catch (IOException e)
{ {
_log.log(Level.WARNING, e.getMessage(), e); LOGGER.log(Level.WARNING, e.getMessage(), e);
} }
} }
} }
@@ -73,23 +73,23 @@ public class FaenorScriptEngine extends ScriptEngine
} }
catch (ParserNotCreatedException e) catch (ParserNotCreatedException e)
{ {
_log.log(Level.WARNING, "ERROR: No parser registered for Script: " + parserClass + ": " + e.getMessage()); LOGGER.log(Level.WARNING, "ERROR: No parser registered for Script: " + parserClass + ": " + e.getMessage());
} }
if (parser == null) if (parser == null)
{ {
_log.warning("Unknown Script Type: " + script.getName()); LOGGER.warning("Unknown Script Type: " + script.getName());
return; return;
} }
try try
{ {
parser.parseScript(node, context); parser.parseScript(node, context);
_log.info(getClass().getSimpleName() + ": Loaded " + script.getName() + " successfully."); LOGGER.info(getClass().getSimpleName() + ": Loaded " + script.getName() + " successfully.");
} }
catch (Exception e) catch (Exception e)
{ {
_log.log(Level.WARNING, "Script Parsing Failed: " + e.getMessage()); LOGGER.log(Level.WARNING, "Script Parsing Failed: " + e.getMessage());
} }
} }

View File

@@ -31,7 +31,7 @@ import org.l2jmobius.Config;
*/ */
public class GMAudit public class GMAudit
{ {
private static final Logger _log = Logger.getLogger(GMAudit.class.getName()); private static final Logger LOGGER = Logger.getLogger(GMAudit.class.getName());
static static
{ {
new File("log/GMAudit").mkdirs(); new File("log/GMAudit").mkdirs();
@@ -61,7 +61,7 @@ public class GMAudit
} }
catch (IOException e) catch (IOException e)
{ {
_log.log(Level.SEVERE, "GMAudit for GM " + gmName + " could not be saved: ", e); LOGGER.log(Level.SEVERE, "GMAudit for GM " + gmName + " could not be saved: ", e);
} }
} }

View File

@@ -66,9 +66,9 @@ public class GameServerTable
public GameServerTable() public GameServerTable()
{ {
loadServerNames(); loadServerNames();
LOGGER.info("Loaded " + _serverNames.size() + " server names"); LOGGER.info("Loaded " + _serverNames.size() + " server names.");
loadRegisteredGameServers(); loadRegisteredGameServers();
LOGGER.info("Loaded " + _gameServerTable.size() + " registered Game Servers"); LOGGER.info("Loaded " + _gameServerTable.size() + " registered Game Servers.");
loadRSAKeys(); loadRSAKeys();
LOGGER.info("Cached " + _keyPairs.length + " RSA keys for Game Server communication."); LOGGER.info("Cached " + _keyPairs.length + " RSA keys for Game Server communication.");
} }

View File

@@ -143,7 +143,7 @@ public class LoginController
_keyPairs[i] = new ScrambledKeyPair(keygen.generateKeyPair()); _keyPairs[i] = new ScrambledKeyPair(keygen.generateKeyPair());
} }
LOGGER.info("Cached 10 KeyPairs for RSA communication"); LOGGER.info("Cached 10 KeyPairs for RSA communication.");
testCipher((RSAPrivateKey) _keyPairs[0]._pair.getPrivate()); testCipher((RSAPrivateKey) _keyPairs[0]._pair.getPrivate());
// Store keys for blowfish communication // Store keys for blowfish communication
@@ -182,7 +182,7 @@ public class LoginController
_blowfishKeys[i][j] = (byte) (Rnd.get(255) + 1); _blowfishKeys[i][j] = (byte) (Rnd.get(255) + 1);
} }
} }
LOGGER.info("Stored " + _blowfishKeys.length + " keys for Blowfish communication"); LOGGER.info("Stored " + _blowfishKeys.length + " keys for Blowfish communication.");
} }
/** /**
@@ -737,8 +737,7 @@ public class LoginController
_lastPassword = password; _lastPassword = password;
_lastAttempTime = System.currentTimeMillis(); _lastAttempTime = System.currentTimeMillis();
} }
else else // trying the same password is not brute force
// trying the same password is not brute force
{ {
_lastAttempTime = System.currentTimeMillis(); _lastAttempTime = System.currentTimeMillis();
} }

View File

@@ -16,7 +16,7 @@ Clan / Alliance system.
Player item stores. Player item stores.
Chronicle 1: http://legacy.lineage2.com/news/chronicle1_01.html Chronicle 1: http://legacy.lineage2.com/news/chronicle1_01.html
Territories: Aden Castle & Town, Cave of Giants, Angel Waterfall, Forest of Mirrors, Cemetery of Kings, Sealing of Shilen, Blazing Swamp, Tower of Insolence, Lair of Antharas, Hardins Academy, Giran Harbor, Bandit Stronghold. Territories: Aden Castle & Town, Cave of Giants, Angel Waterfall, Forest of Mirrors, Cemetery of Kings, Sealing of Shilen, Blazing Swamp, Tower of Insolence, Lair of Antharas, Hardin's Academy, Giran Harbor, Bandit Stronghold.
Castle Siege system. Castle Siege system.
Weight System. Weight System.
Antharas raid. Antharas raid.
@@ -53,7 +53,7 @@ New Player Bonuses.
Equipment Exchange. Equipment Exchange.
Chronicle 4: http://legacy.lineage2.com/news/chronicle4_01.html Chronicle 4: http://legacy.lineage2.com/news/chronicle4_01.html
Territories: Varka Silenos Outpost, Ketra Orc Outpost, Wall of Argos, Imperial Tomb, Hot Springs, Forge of the Gods, Garden of Beasts, Devils Pass, Valley of the Saints, Beast Farm, Forest of the Dead, Swamp of Screams. Territories: Varka Silenos Outpost, Ketra Orc Outpost, Wall of Argos, Imperial Tomb, Hot Springs, Forge of the Gods, Garden of Beasts, Devil's Pass, Valley of the Saints, Beast Farm, Forest of the Dead, Swamp of Screams.
Noblesse. Noblesse.
Heroes and Olympiad. Heroes and Olympiad.
Skill Enchanting. Skill Enchanting.
@@ -66,8 +66,8 @@ Recording Gameplay.
Community Clan search. Community Clan search.
Chronicle 5: http://legacy.lineage2.com/news/chronicle5_01.html Chronicle 5: http://legacy.lineage2.com/news/chronicle5_01.html
Territories: The Pagan Temple, The Stakato Nest, The Monastery of Silence, The Frozen Labyrinth, The Den of Evil, The Plunderous Plains, The Ice Queens Castle, The Crypts of Disgrace, The Pavel Ruins Territories: The Pagan Temple, The Stakato Nest, The Monastery of Silence, The Frozen Labyrinth, The Den of Evil, The Plunderous Plains, The Ice Queen's Castle, The Crypts of Disgrace, The Pavel Ruins
Rune Castles Benom. Rune Castle's Benom.
Gatekeeper Ordinary, Noblesse, Clan Hall and Seven Signs Priest teleports. Gatekeeper Ordinary, Noblesse, Clan Hall and Seven Signs Priest teleports.
Frintezza raid. Frintezza raid.
The Demonic Sword Zariche. The Demonic Sword Zariche.
@@ -79,11 +79,12 @@ Rainbow Springs Chateau.
Interlude: http://legacy.lineage2.com/news/interlude_01.html Interlude: http://legacy.lineage2.com/news/interlude_01.html
Weapon Augmentation system. Weapon Augmentation system.
Primeval Isle. Primeval Isle.
Primeval Isles Tyrannosaurus Trapping System. Primeval Isle's Tyrannosaurus Trapping System.
Shadow Weapons. Shadow Weapons.
Blood Sword Akamanah. Blood Sword Akamanah.
Command Channel system. Command Channel system.
Dueling system. Dueling system.
Herb item drops. https://lineage.pmfun.com/list/c5c6
TODO: TODO: