Jump to content

Question

Posted

Hello i have this problem when some is dying to a town

 

http://postimg.org/image/4rypri4yd/

 

here is the gameserver error

at com.l2jfrozen.gameserver.model.entity.siege.Fort.checkIfInZone(Fort.j

at com.l2jfrozen.gameserver.managers.FortManager.getFort(FortManager.jav

at com.l2jfrozen.gameserver.managers.FortManager.getFort(FortManager.jav

at com.l2jfrozen.gameserver.network.serverpackets.Die.writeImpl(Die.java

at com.l2jfrozen.gameserver.network.serverpackets.L2GameServerPacket.wri
eServerPacket.java:42)
at com.l2jfrozen.netcore.SelectorThread.putPacketIntoWriteBuffer(Selecto
java:627)
at com.l2jfrozen.netcore.SelectorThread.prepareWriteBuffer(SelectorThrea
99)
at com.l2jfrozen.netcore.SelectorThread.writePacket(SelectorThread.java:

at com.l2jfrozen.netcore.SelectorThread.run(SelectorThread.java:182)
g.NullPointerException
at com.l2jfrozen.gameserver.model.entity.siege.Fort.checkIfInZone(Fort.j

at com.l2jfrozen.gameserver.managers.FortManager.getFort(FortManager.jav

at com.l2jfrozen.gameserver.managers.FortManager.getFort(FortManager.jav

at com.l2jfrozen.gameserver.datatables.csv.MapRegionTable.getTeleToLocat
egionTable.java:456)
at com.l2jfrozen.gameserver.network.clientpackets.RequestRestartPoint$De
run(RequestRestartPoint.java:208)
at com.l2jfrozen.gameserver.network.clientpackets.RequestRestartPoint.ru
questRestartPoint.java:257)
at com.l2jfrozen.gameserver.network.clientpackets.L2GameClientPacket.run
lientPacket.java:75)
at com.l2jfrozen.gameserver.network.L2GameClient.run(L2GameClient.java:1

at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

2 answers to this question

Recommended Posts

  • 0
Posted

What should i remove? :D first time i see this

/*
 * This program is free software: you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any later
 * version.
 * 
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
 * details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * this program. If not, see <http://www.gnu.org/licenses/>.
 */
package com.l2jfrozen.gameserver.model.entity.siege;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Logger;

import javolution.util.FastList;

import com.l2jfrozen.gameserver.datatables.csv.DoorTable;
import com.l2jfrozen.gameserver.datatables.sql.ClanTable;
import com.l2jfrozen.gameserver.model.L2Clan;
import com.l2jfrozen.gameserver.model.L2Object;
import com.l2jfrozen.gameserver.model.actor.instance.L2DoorInstance;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.Announcements;
import com.l2jfrozen.gameserver.model.entity.sevensigns.SevenSigns;
import com.l2jfrozen.gameserver.model.zone.type.L2FortZone;
import com.l2jfrozen.gameserver.network.serverpackets.PlaySound;
import com.l2jfrozen.gameserver.network.serverpackets.PledgeShowInfoUpdate;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;
import com.l2jfrozen.util.CloseUtil;
import com.l2jfrozen.util.database.L2DatabaseFactory;

/**
 * @author programmos
 */

public class Fort
{
	protected static final Logger _log = Logger.getLogger(Fort.class.getName());

	// =========================================================
	// Data Field
	private int _fortId = 0;
	private List<L2DoorInstance> _doors = new FastList<L2DoorInstance>();
	private List<String> _doorDefault = new FastList<String>();
	private String _name = "";
	private int _ownerId = 0;
	private L2Clan _fortOwner = null;
	private FortSiege _siege = null;
	private Calendar _siegeDate;
	private int _siegeDayOfWeek = 7; // Default to saturday
	private int _siegeHourOfDay = 20; // Default to 8 pm server time
	private L2FortZone _zone;
	private L2Clan _formerOwner = null;

	// =========================================================
	// Constructor
	public Fort(int fortId)
	{
		_fortId = fortId;
		load();
		loadDoor();
	}

	// =========================================================
	// Method - Public

	public void EndOfSiege(L2Clan clan)
	{
		ThreadPoolManager.getInstance().scheduleGeneral(new endFortressSiege(this, clan), 1000);

	}

	public void Engrave(L2Clan clan, int objId)
	{
		getSiege().announceToPlayer("Clan " + clan.getName() + " has finished to raise the flag.", true);
		setOwner(clan);
	}

	// This method add to the treasury
	/**
	 * Add amount to fort instance's treasury (warehouse). 
	 * @param amount
	 */
	public void addToTreasury(int amount)
	{
		// TODO: Implement?
	}

	/**
	 * Add amount to fort instance's treasury (warehouse), no tax paying. 
	 * @param amount 
	 * @return
	 */
	public boolean addToTreasuryNoTax(int amount)
	{
		return true;
	}

	/**
	 * Move non clan members off fort area and to nearest town.<BR>
	 * <BR>
	 */
	public void banishForeigners()
	{
		_zone.banishForeigners(getOwnerId());
	}

	/**
	 * @param x 
	 * @param y 
	 * @param z 
	 * @return true if object is inside the zone
	 */
	public boolean checkIfInZone(int x, int y, int z)
	{
		return _zone.isInsideZone(x, y, z);
	}

	/**
	 * Sets this forts zone
	 * 
	 * @param zone
	 */
	public void setZone(L2FortZone zone)
	{
		_zone = zone;
	}

	public L2FortZone getZone()
	{
		return _zone;
	}

	/**
	 * Get the objects distance to this fort
	 * 
	 * @param obj
	 * @return
	 */
	public double getDistance(L2Object obj)
	{
		return _zone.getDistanceToZone(obj);
	}

	public void closeDoor(L2PcInstance activeChar, int doorId)
	{
		openCloseDoor(activeChar, doorId, false);
	}

	public void openDoor(L2PcInstance activeChar, int doorId)
	{
		openCloseDoor(activeChar, doorId, true);
	}

	public void openCloseDoor(L2PcInstance activeChar, int doorId, boolean open)
	{
		if(activeChar.getClanId() != getOwnerId())
			return;

		L2DoorInstance door = getDoor(doorId);

		if(door != null)
		{
			if(open)
			{
				door.openMe();
			}
			else
			{
				door.closeMe();
			}
		}

		door = null;
	}

	// This method is used to begin removing all fort upgrades
	public void removeUpgrade()
	{
		removeDoorUpgrade();
	}

	// This method updates the fort tax rate
	public void setOwner(L2Clan clan)
	{
		// Remove old owner
		if(getOwnerId() > 0 && (clan == null || clan.getClanId() != getOwnerId()))
		{
			// Try to find clan instance
			L2Clan oldOwner = ClanTable.getInstance().getClan(getOwnerId());

			if(oldOwner != null)
			{
				if(_formerOwner == null)
				{
					_formerOwner = oldOwner;
				}

				// Unset has fort flag for old owner
				oldOwner.setHasFort(0);
				Announcements.getInstance().announceToAll(oldOwner.getName() + " has lost " + getName() + " fortress!");
			}

			oldOwner = null;
		}

		updateOwnerInDB(clan); // Update in database

		if(getSiege().getIsInProgress())
		{
			getSiege().midVictory(); // Mid victory phase of siege
		}

		updateClansReputation();

		_fortOwner = clan;
	}

	public void removeOwner(L2Clan clan)
	{
		if(clan != null)
		{
			_formerOwner = clan;

			clan.setHasFort(0);
			Announcements.getInstance().announceToAll(clan.getName() + " has lost " + getName() + " fort");
			clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
		}

		updateOwnerInDB(null);

		if(getSiege().getIsInProgress())
		{
			getSiege().midVictory();
		}

		updateClansReputation();

		_fortOwner = null;
	}

	// This method updates the fort tax rate
	public void setTaxPercent(L2PcInstance activeChar, int taxPercent)
	{
		int maxTax;

		switch(SevenSigns.getInstance().getSealOwner(SevenSigns.SEAL_STRIFE))
		{
			case SevenSigns.CABAL_DAWN:
				maxTax = 25;
				break;
			case SevenSigns.CABAL_DUSK:
				maxTax = 5;
				break;
			default: // no owner
				maxTax = 15;
		}

		if(taxPercent < 0 || taxPercent > maxTax)
		{
			activeChar.sendMessage("Tax value must be between 0 and " + maxTax + ".");
			return;
		}

		activeChar.sendMessage(getName() + " fort tax changed to " + taxPercent + "%.");
	}

	/**
	 * Respawn all doors on fort grounds<BR>
	 * <BR>
	 */
	public void spawnDoor()
	{
		spawnDoor(false);
	}

	/**
	 * Respawn all doors on fort grounds
	 * @param isDoorWeak 
	 */
	public void spawnDoor(boolean isDoorWeak)
	{
		for(int i = 0; i < getDoors().size(); i++)
		{
			L2DoorInstance door = getDoors().get(i);

			if(door.getCurrentHp() >= 0)
			{
				door.decayMe(); // Kill current if not killed already
				door = DoorTable.parseList(_doorDefault.get(i));

				if(isDoorWeak)
				{
					door.setCurrentHp(door.getMaxHp() / 2);
				}
				else {
					door.setCurrentHp(door.getMaxHp());
				}

				door.spawnMe(door.getX(), door.getY(), door.getZ());
				getDoors().set(i, door);
			}
			else if(!door.getOpen())
			{
				door.closeMe();
			}

			door = null;
		}

		loadDoorUpgrade(); // Check for any upgrade the doors may have
	}

	// This method upgrade door
	public void upgradeDoor(int doorId, int hp, int pDef, int mDef)
	{
		L2DoorInstance door = getDoor(doorId);

		if(door == null)
			return;

		if(door.getDoorId() == doorId)
		{
			door.setCurrentHp(door.getMaxHp() + hp);

			saveDoorUpgrade(doorId, hp, pDef, mDef);
			return;
		}
	}

	// =========================================================
	// Method - Private
	// This method loads fort
	private void load()
	{
		Connection con = null;
		try
		{
			PreparedStatement statement;
			ResultSet rs;

			con = L2DatabaseFactory.getInstance().getConnection(false);

			statement = con.prepareStatement("Select * from fort where id = ?");
			statement.setInt(1, getFortId());
			rs = statement.executeQuery();

			while(rs.next())
			{
				_name = rs.getString("name");

				_siegeDate = Calendar.getInstance();
				_siegeDate.setTimeInMillis(rs.getLong("siegeDate"));

				_siegeDayOfWeek = rs.getInt("siegeDayOfWeek");

				if(_siegeDayOfWeek < 1 || _siegeDayOfWeek > 7)
				{
					_siegeDayOfWeek = 7;
				}

				_siegeHourOfDay = rs.getInt("siegeHourOfDay");
				if(_siegeHourOfDay < 0 || _siegeHourOfDay > 23)
				{
					_siegeHourOfDay = 20;
				}

				_ownerId = rs.getInt("owner");
			}

			rs.close();
			statement.close();
			statement = null;
			rs = null;

			if(getOwnerId() > 0)
			{
				L2Clan clan = ClanTable.getInstance().getClan(getOwnerId()); // Try to find clan instance
				//ThreadPoolManager.getInstance().scheduleGeneral(new FortUpdater(clan, 1), 3600000);     // Schedule owner tasks to start running
				if(clan!=null) {
					clan.setHasFort(getFortId());
					_fortOwner = clan;
				}
				clan = null;
			}
			else
			{
				_fortOwner = null;
			}

		}
		catch(Exception e)
		{
			_log.warning("Exception: loadFortData(): " + e.getMessage());
			e.printStackTrace();
		}
		finally
		{
			CloseUtil.close(con);
			con = null;
		}
	}

	// This method loads fort door data from database
	private void loadDoor()
	{
		Connection con = null;
		try
		{
			con = L2DatabaseFactory.getInstance().getConnection(false);
			PreparedStatement statement = con.prepareStatement("Select * from fort_door where fortId = ?");
			statement.setInt(1, getFortId());
			ResultSet rs = statement.executeQuery();

			while(rs.next())
			{
				// Create list of the door default for use when respawning dead doors
				_doorDefault.add(rs.getString("name") + ";" + rs.getInt("id") + ";" + rs.getInt("x") + ";" + rs.getInt("y") + ";" + rs.getInt("z") + ";" + rs.getInt("range_xmin") + ";" + rs.getInt("range_ymin") + ";" + rs.getInt("range_zmin") + ";" + rs.getInt("range_xmax") + ";" + rs.getInt("range_ymax") + ";" + rs.getInt("range_zmax") + ";" + rs.getInt("hp") + ";" + rs.getInt("pDef") + ";" + rs.getInt("mDef"));

				L2DoorInstance door = DoorTable.parseList(_doorDefault.get(_doorDefault.size() - 1));
				door.spawnMe(door.getX(), door.getY(), door.getZ());

				_doors.add(door);

				DoorTable.getInstance().putDoor(door);
				door = null;
			}

			rs.close();
			statement.close();
			statement = null;
			rs = null;
		}
		catch(Exception e)
		{
			_log.warning("Exception: loadFortDoor(): " + e.getMessage());
			e.printStackTrace();
		}
		finally
		{
			CloseUtil.close(con);
			con = null;
		}
	}

	// This method loads fort door upgrade data from database
	private void loadDoorUpgrade()
	{
		Connection con = null;
		try
		{
			con = L2DatabaseFactory.getInstance().getConnection(false);
			PreparedStatement statement = con.prepareStatement("Select * from fort_doorupgrade where doorId in (Select Id from fort_door where fortId = ?)");
			statement.setInt(1, getFortId());
			ResultSet rs = statement.executeQuery();

			while(rs.next())
			{
				upgradeDoor(rs.getInt("id"), rs.getInt("hp"), rs.getInt("pDef"), rs.getInt("mDef"));
			}
			rs.close();
			statement.close();
			statement = null;
			rs = null;
		}
		catch(Exception e)
		{
			_log.warning("Exception: loadFortDoorUpgrade(): " + e.getMessage());
			e.printStackTrace();
		}
		finally
		{
			CloseUtil.close(con);
			con = null;
		}
	}

	private void removeDoorUpgrade()
	{
		Connection con = null;
		try
		{
			con = L2DatabaseFactory.getInstance().getConnection(false);
			PreparedStatement statement = con.prepareStatement("delete from fort_doorupgrade where doorId in (select id from fort_door where fortId=?)");
			statement.setInt(1, getFortId());
			statement.execute();
			statement.close();
			statement = null;
		}
		catch(Exception e)
		{
			_log.warning("Exception: removeDoorUpgrade(): " + e.getMessage());
			e.printStackTrace();
		}
		finally
		{
			CloseUtil.close(con);
			con = null;
		}
	}

	private void saveDoorUpgrade(int doorId, int hp, int pDef, int mDef)
	{
		Connection con = null;
		try
		{
			con = L2DatabaseFactory.getInstance().getConnection(false);
			PreparedStatement statement = con.prepareStatement("INSERT INTO fort_doorupgrade (doorId, hp, pDef, mDef) values (?,?,?,?)");
			statement.setInt(1, doorId);
			statement.setInt(2, hp);
			statement.setInt(3, pDef);
			statement.setInt(4, mDef);
			statement.execute();
			statement.close();
			statement = null;
		}
		catch(Exception e)
		{
			_log.warning("Exception: saveDoorUpgrade(int doorId, int hp, int pDef, int mDef): " + e.getMessage());
			e.printStackTrace();
		}
		finally
		{
			CloseUtil.close(con);
			con = null;
		}
	}

	private void updateOwnerInDB(L2Clan clan)
	{
		if(clan != null)
		{
			_ownerId = clan.getClanId(); // Update owner id property
		}
		else
		{
			_ownerId = 0; // Remove owner
		}

		Connection con = null;
		try
		{
			con = L2DatabaseFactory.getInstance().getConnection(false);
			PreparedStatement statement;

			statement = con.prepareStatement("UPDATE fort SET owner=? where id = ?");
			statement.setInt(1, getOwnerId());
			statement.setInt(2, getFortId());
			statement.execute();
			statement.close();
			statement = null;

			// ============================================================================

			// Announce to clan memebers
			if(clan != null)
			{
				clan.setHasFort(getFortId()); // Set has fort flag for new owner
				Announcements.getInstance().announceToAll(clan.getName() + " has taken " + getName() + " fort!");
				clan.broadcastToOnlineMembers(new PledgeShowInfoUpdate(clan));
				clan.broadcastToOnlineMembers(new PlaySound(1, "Siege_Victory", 0, 0, 0, 0, 0));
				//ThreadPoolManager.getInstance().scheduleGeneral(new FortUpdater(clan, 1), 3600000);   // Schedule owner tasks to start running
			}
		}
		catch(Exception e)
		{
			_log.warning("Exception: updateOwnerInDB(L2Clan clan): " + e.getMessage());
			e.printStackTrace();
		}
		finally
		{
			CloseUtil.close(con);
			con = null;
		}
	}

	// =========================================================
	// Property
	public final int getFortId()
	{
		return _fortId;
	}

	public final L2Clan getOwnerClan()
	{
		return _fortOwner;
	}

	public final int getOwnerId()
	{
		return _ownerId;
	}

	public final L2DoorInstance getDoor(int doorId)
	{
		if(doorId <= 0)
			return null;

		for(int i = 0; i < getDoors().size(); i++)
		{
			L2DoorInstance door = getDoors().get(i);

			if(door.getDoorId() == doorId)
				return door;

			door = null;
		}
		return null;
	}

	public final List<L2DoorInstance> getDoors()
	{
		return _doors;
	}

	public final FortSiege getSiege()
	{
		if(_siege == null)
		{
			_siege = new FortSiege(new Fort[]
			{
				this
			});
		}

		return _siege;
	}

	public final Calendar getSiegeDate()
	{
		return _siegeDate;
	}

	public final void setSiegeDate(Calendar siegeDate)
	{
		_siegeDate = siegeDate;
	}

	public final int getSiegeDayOfWeek()
	{
		return _siegeDayOfWeek;
	}

	public final int getSiegeHourOfDay()
	{
		return _siegeHourOfDay;
	}

	public final String getName()
	{
		return _name;
	}

	public void updateClansReputation()
	{
		if(_formerOwner != null)
		{
			if(_formerOwner != ClanTable.getInstance().getClan(getOwnerId()))
			{
				int maxreward = Math.max(0, _formerOwner.getReputationScore());

				L2Clan owner = ClanTable.getInstance().getClan(getOwnerId());

				if(owner != null)
				{
					owner.setReputationScore(owner.getReputationScore() + Math.min(500, maxreward), true);
					owner.broadcastToOnlineMembers(new PledgeShowInfoUpdate(owner));
				}

				owner = null;
			}
			else
			{
				_formerOwner.setReputationScore(_formerOwner.getReputationScore() + 250, true);
			}

			_formerOwner.broadcastToOnlineMembers(new PledgeShowInfoUpdate(_formerOwner));
		}
		else
		{
			L2Clan owner = ClanTable.getInstance().getClan(getOwnerId());
			if(owner != null)
			{
				owner.setReputationScore(owner.getReputationScore() + 500, true);
				owner.broadcastToOnlineMembers(new PledgeShowInfoUpdate(owner));
			}

			owner = null;
		}
	}

	private class endFortressSiege implements Runnable
	{
		private Fort _f;
		private L2Clan _clan;

		public endFortressSiege(Fort f, L2Clan clan)
		{
			_f = f;
			_clan = clan;
		}

		@Override
		public void run()
		{
			_f.Engrave(_clan, 0);
		}

	}
}

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Posts

    • ⚔️ DRAGON-NETWORK LEGACY x15 ⚔️ INTERLUDE+ • SUBSTACK • STAGE PROGRESSION 🔥 GRAND OPENING: OCTOBER 2, 2026 🕖 19:00 UTC+2 🌐 https://dragon-network.eu ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ THE LEGACY RETURNS. YOUR STORY BEGINS. The battlefield is calling once again! Dragon-Network returns with LEGACY x15, delivering a unique Interlude+ Substack experience featuring competitive PvP, expanded content, and progressive gameplay. Forge your build. Gather your clan. Conquer your enemies. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ⚙️ SERVER INFORMATION • Chronicle: Interlude+ • Gameplay: Substack • EXP / SP: x15 • Adena: x10 • Drop / Spoil: x10 • Seal Stones: x10 • Raid Boss Drops: x5 • Epic Drops: x1 • Maximum Level: 85 • Box Limit: 1 Main + 2 Boxes ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ⚔️ SUBSTACK SYSTEM Create your own playstyle and explore unique class combinations. ✓ Free starting Golkonda Horn ✓ First Stack Sub from level 40 ✓ Additional horns obtainable through gameplay ✓ Custom class and skill adjustments Your build. Your strategy. Your legacy. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🌍 INTERLUDE+ CONTENT Experience the classic world of Lineage II with additional content and expanded progression. ✓ Kamaloka & Labyrinth ✓ Pailaka Quests ✓ Hellbound Island ✓ Isle of Prayer ✓ Improved Pets ✓ S80 Equipment ✓ Attribute System ✓ Siegeable Fortresses Content is introduced progressively through server stages. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🏆 PVP & EVENTS Prepare for competitive battles and valuable rewards! ✓ Daily Team vs Team events ✓ Event Coins and exclusive rewards ✓ Epic jewelry reward opportunities ✓ Weekly Olympiad cycles ✓ Castle Sieges ✓ Clan competition Fight for glory. Earn your rewards. ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🛡️ FAIR PLAY & QUALITY OF LIFE ✓ DragonGuard Anti-Cheat ✓ Custom Anti-Bot CAPTCHA ✓ No Pay-to-Win philosophy ✓ Improved class balance ✓ Progressive NPC Buffer ✓ 1-hour buffs ✓ Offline Shops ✓ Community Board skill learning ✓ Shift+Click monster drop information ✓ Combo Songs & Dances ✓ Tattoo System ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 📅 SERVER ROADMAP OCT 02 — GRAND OPENING OCT 05 — Seven Signs Quest Period OCT 07 — Team vs Team Begins OCT 12 — Olympiad & Seal Validation OCT 17–18 — First Castle Sieges OCT 19 — First Heroes OCT 28 — Stage 2: Dynasty & Attribute Stones ━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 🔥 THE COUNTDOWN HAS BEGUN! Old rivalries will return. New alliances will rise. Legends will be written. Will you be part of the next chapter? ⚔️ DRAGON-NETWORK LEGACY x15 📅 OCTOBER 2, 2026 — 19:00 UTC+2 🌐 OFFICIAL WEBSITE https://dragon-network.eu 📜 SERVER FEATURES https://dragon-network.eu/features 🔧 SEASON IMPROVEMENTS https://dragon-network.eu/whats-new DRAGON-NETWORK — FORGE YOUR LEGACY.
    • Clan: BeMyFrag (BMF) Clan Leader: AresQQ (Ares / PapaSmurf) Type: EU PvP clan, English-speaking (Polish and other EU languages inside) Recruiting: YES — open until launch, target 80–120 active players Where are we playing now? Eigis Odyssey Season 3 — opens 9 October 2026, 8:00 PM. Full server briefing: https://bemyfrag.com/eigis/ How many members? target 80–120 at launch. Which servers have we played? Playing together for over a decade. Last season: The Cult  What we offer: Organised mass PvP and castle sieges every Sunday (Aden/Goddard alternating) TeamSpeak 3 (bmf.ts3.so) + in-client voice for parties DKP ranking with reward codes for active players Fair loot rules and disputes — no drama Maintained server FAQ, so you don’t figure out Eigis alone Multigaming Discord community beyond L2 Clan rules: Be on TeamSpeak for mass PvP and sieges Party up before launch — no solo drifting competitive and casual both welcome Join: https://discord.gg/2UweQ3RYTZ → channel #l2eigis-apply → ask for rights.
  • Topics

×
×
  • Create New...

Important Information

This community uses essential cookies to function properly. Non-essential cookies and third-party services are used only with your consent. Read our Privacy Policy and We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue..