All pastes #402210 Raw Edit

Untitled

public text v1 · immutable
·published 2007-03-19 19:54 UTC
rendered paste body
/*
 * $HeadURL: $
 *
 * $Author: $
 * $Date: $
 * $Revision: $
 *
 * 
 * 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 2, 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, write to the Free Software
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
 * 02111-1307, USA.
 *
 * http://www.gnu.org/copyleft/gpl.html
 */
package net.sf.l2j.gameserver.instancemanager;

import java.util.concurrent.Future;
import java.util.logging.Logger;
import java.util.Map;
import java.util.Set;
import java.util.List;
import javolution.util.FastMap;
import javolution.util.FastList;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import net.sf.l2j.Config;
import net.sf.l2j.L2DatabaseFactory;
import net.sf.l2j.gameserver.datatables.SpawnTable;
import net.sf.l2j.gameserver.datatables.DoorTable;
import net.sf.l2j.gameserver.datatables.NpcTable;
import net.sf.l2j.gameserver.ThreadPoolManager;
import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
import net.sf.l2j.gameserver.model.L2ItemInstance;
import net.sf.l2j.gameserver.model.L2World;
import net.sf.l2j.gameserver.serverpackets.SystemMessage;
import net.sf.l2j.gameserver.util.Util;
import net.sf.l2j.gameserver.lib.Rnd;
import net.sf.l2j.gameserver.model.L2Spawn;
import net.sf.l2j.gameserver.templates.L2NpcTemplate;
import net.sf.l2j.gameserver.model.actor.instance.L2NpcInstance;
import net.sf.l2j.gameserver.model.actor.instance.L2SepulcherMonsterInstance;

/**
 * This class ...
 * ‚S‘å—ì•_ƒ}ƒl[ƒWƒƒ[ 
 * @version $Revision: $ $Date: $
 * @author  sandman
 */
public class FourSepulchersManager
{
    // ƒƒK[
    protected static Logger _log = Logger.getLogger(FourSepulchersManager.class.getName());

    // ƒCƒ“ƒXƒ^ƒ“ƒX
    private static FourSepulchersManager _Instance;

    // ƒNƒGƒXƒgu‚S‚‚̔tv
    private String _QuestId = "620_FourGoblets";
    // —ì•_‚̒ʍsØ
    private int _EntrancePass = 7075;
    private int _UsedEntrancePass = 7261;
    // ‰ï“°‚ÌŒ®
    private final int _HallsKey = 7260;
	// ŒÃ‚¢ƒuƒ[ƒ`
    private int _OldBrooch = 7262;

    // ó‘Ô‘JˆÚŠÇ—
    // ŽQ‰ÁŽó•tŽžŠÔ‚©‚Ç‚¤‚©H
    protected boolean _InEntryTime = false;
    // ƒEƒH[ƒ€ƒAƒbƒv‚©‚Ç‚¤‚©H
    protected boolean _InWarmUpTime = false;
    // —ì•_U—ªŽžŠÔ‚©‚Ç‚¤‚©H
    protected boolean _InAttackTime = false;
    // ƒN[ƒ‹ƒ_ƒEƒ“’†‚©‚Ç‚¤‚©H
    protected boolean _InCoolDownTime = false;

    // ó‘Ô‘JˆÚ—pƒ^ƒXƒN
    protected Future _ChangeCoolDownTimeTask = null;
    protected Future _ChangeEntryTimeTask = null; 
    protected Future _ChaneWarmUpTimeTask = null;
    protected Future _ChangeAttackTimeTask = null;
    
    
    // ‰ï“°–å”ԂƃhƒA‚Ì‘g‚ݍ‡‚킹(<–å”Ô‚ÌIDAƒhƒA‚ÌID>)
    protected static Map<Integer,Integer> _HallGateKeepers = new FastMap<Integer,Integer>();
    
    // ’jŽÝ‚̉ƒeƒŒƒ|[ƒgÀ•W[x,y,z]
    private int[][] _StartHallSpawn =
	{
		{181632,-85587,-7218},     // ª•žŽÒ‚Ì—ì•_
		{179963,-88978,-7218},     // Žx”zŽÒ‚Ì—ì•_
		{173217,-86132,-7218},     // ‘匫ŽÒ‚Ì—ì•_
		{175608,-82296,-7218}      // R”»ŽÒ‚Ì—ì•_
	};
    
    // —ì•_ŠÇ—l‚Æ’jŽÝ‚̉ƒeƒŒƒ|[ƒgÀ•W‚Ì‘g‚ݍ‡‚킹(<ŠÇ—l‚ÌIDAÀ•W[x,y,z]>)
    protected static Map<Integer,int[]> _StartHallSpawns = new FastMap<Integer,int[]>();

    // ƒnƒŠƒVƒƒƒVƒƒƒh[‚̏oŒ»À•W[oŒ»ƒpƒ^[ƒ“][—ì•_][npcId,x,y,z,heading]
    private int[][][] _ShadowSpawnLoc =
	{
		// oŒ»ƒpƒ^[ƒ“‚P
		{
			{25339,191231,-85574,-7216,33380},	// ª•žŽÒ
			{25349,189534,-88969,-7216,32768},	// Žx”zŽÒ
			{25346,173195,-76560,-7215,49277},	// ‘匫ŽÒ
			{25342,175591,-72744,-7215,49317}	// R”»ŽÒ
		},
		// oŒ»ƒpƒ^[ƒ“‚Q   		
		{
			{25342,191231,-85574,-7216,33380},	// ª•žŽÒ
			{25339,189534,-88969,-7216,32768},	// Žx”zŽÒ
			{25349,173195,-76560,-7215,49277},	// ‘匫ŽÒ@
			{25346,175591,-72744,-7215,49317}	// R”»ŽÒ
		},
		// oŒ»ƒpƒ^[ƒ“‚R
		{
			{25346,191231,-85574,-7216,33380},	// ª•žŽÒ
			{25342,189534,-88969,-7216,32768},	// Žx”zŽÒ
			{25339,173195,-76560,-7215,49277},	// ‘匫ŽÒ
			{25349,175591,-72744,-7215,49317}	// R”»ŽÒ
		},
		// oŒ»ƒpƒ^[ƒ“‚S
		{
			{25349,191231,-85574,-7216,33380},	// ª•žŽÒ
			{25346,189534,-88969,-7216,32768},	// Žx”zŽÒ
			{25342,173195,-76560,-7215,49277},	// ‘匫ŽÒ
			{25339,175591,-72744,-7215,49317}	// R”»ŽÒ
		},
	};
    
    // ŒöŽÝ‚Ì–å”ԂƃnƒŠƒVƒƒƒVƒƒƒh[‚Ì‘g‚ݍ‡‚킹
    protected Map<Integer,L2Spawn> _ShadowSpawns = new FastMap<Integer,L2Spawn>();
    
    // —ì•_ŠÇ—l‚Æ—ì•_‚Ì—˜—pó‘Ô‚Ì‘g‚ݍ‡‚킹(<ŠÇ—l‚ÌIDA—˜—pó‘Ô(true = ’N‚©‚ªŽg‚Á‚Ä‚¢‚é)>)
    protected static Map<Integer,Boolean> _HallInUse = new FastMap<Integer,Boolean>();
    
    // —ì•_ŠÇ—l‚Æ’§íŽÒƒp[ƒeƒBƒŠ[ƒ_[‚Ì‘g‚ݍ‡‚킹
    protected Map<Integer,L2PcInstance> _Challengers = new FastMap<Integer,L2PcInstance>();
    
    // ŠÇ—lE‰ï“°–å”Ô‚Æ“ä‚Ì” ‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹
    protected Map<Integer,L2Spawn> _MysteriousBoxSpawns = new FastMap<Integer,L2Spawn>();
    
    // “ä‚Ì” ‚ƏoŒ»‚·‚郂ƒ“ƒXƒ^[‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹i•¨—Œnj
    protected List<L2Spawn> _PhysicalSpawns;
    protected Map<Integer,List> _PhysicalMonsters = new FastMap<Integer,List>();
    // “ä‚Ì” ‚ƏoŒ»‚·‚郂ƒ“ƒXƒ^[‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹i–‚–@Œnj
    protected List<L2Spawn> _MagicalSpawns;
    protected Map<Integer,List> _MagicalMonsters = new FastMap<Integer,List>();
    // ŒöŽÝ‚̉‚Ì“ä‚Ì” ‚ƁAŸr–ÅŒã‚ɍďoŒ»‚·‚郂ƒ“ƒXƒ^[‚Ì‘g‚ݍ‡‚킹
    protected List<L2Spawn> _DukeFinalSpawns;
    protected Map<Integer,List> _DukeFinalMobs = new FastMap<Integer,List>();
    protected Map<Integer,Boolean> _ArchonSpawned = new FastMap<Integer,Boolean>();
    // ƒnƒŠƒVƒƒƒVƒƒƒh[“¢”°Œã‚ɍc’é‚̕挊‚ŏoŒ»‚·‚éNPC‚Ì‘g‚ݍ‡‚킹
    protected List<L2Spawn> _EmperorsGraveSpawns;
    protected Map<Integer,List> _EmperorsGraveNpcs = new FastMap<Integer,List>();
    
    // ŽqŽÝ‚̉‚Ì“ä‚Ì” ‚ƁAoŒ»‚µ‚½ƒ‚ƒ“ƒXƒ^[‚Ì‘g‚ݍ‡‚킹
    protected Map<Integer,List> _ViscountMobs =
    	new FastMap<Integer,List>();
    
    // ŒöŽÝ‚̉‚Ì“ä‚Ì” ‚ƁAoŒ»‚µ‚½ƒ‚ƒ“ƒXƒ^[‚Ì‘g‚ݍ‡‚킹
    protected Map<Integer,List> _DukeMobs =
    	new FastMap<Integer,List>();
    
    // Œ®‚Ì” ‚ðoŒ»‚³‚¹‚郂ƒ“ƒXƒ^[‚ÆŒ®‚Ì” ‚Ì‘g‚ݍ‡‚킹<ƒ‚ƒ“ƒXƒ^[‚ÌNpcId,Œ®‚Ì” ‚ÌNpcId>
    protected Map<Integer,Integer> _KeyBoxNpc = new FastMap<Integer,Integer>();
    protected Map<Integer,L2Spawn> _KeyBoxSpawns = new FastMap<Integer,L2Spawn>();
    
    // ƒP[ƒvƒS[ƒg‚ƃnƒŠƒVƒƒ‚ÌŽ·sŽÒ‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹
    protected Map<Integer,Integer> _Victim = new FastMap<Integer,Integer>();
    protected Map<Integer,L2Spawn> _ExecutionerSpawns = new FastMap<Integer,L2Spawn>();
    
    // —ì•_U—ªŽžŠÔ‚É—ì•_“à‚ɏoŒ»‚µ‚½‘S‚Ẵ‚ƒ“ƒXƒ^[
    protected List<L2NpcInstance> _AllMobs = new FastList<L2NpcInstance>();
    
    // ƒRƒ“ƒXƒgƒ‰ƒNƒ^[
    public FourSepulchersManager()
    {
    }

    // ƒCƒ“ƒXƒ^ƒ“ƒXŠÖ”
    public static final FourSepulchersManager getInstance()
    {
        if (_Instance == null)
        {
            _Instance = new FourSepulchersManager();
        }
        return _Instance;
    }
    
    // ‰Šú‰»
    public void init()
    {
        _log.info("FourSepulchersManager:Init Four-Sepulchers Manager.");

        // ƒ^ƒXƒN‚ð‚·‚×‚ÄƒLƒƒƒ“ƒZƒ‹
        if(_ChangeCoolDownTimeTask != null) _ChangeCoolDownTimeTask.cancel(true);
        if(_ChangeEntryTimeTask != null) _ChangeEntryTimeTask.cancel(true);
        if(_ChaneWarmUpTimeTask != null) _ChaneWarmUpTimeTask.cancel(true);
        if(_ChangeAttackTimeTask != null) _ChangeAttackTimeTask.cancel(true);

        _ChangeCoolDownTimeTask = null;
        _ChangeEntryTimeTask = null; 
        _ChaneWarmUpTimeTask = null;
        _ChangeAttackTimeTask = null;
        
        // ƒtƒ‰ƒO‚ð•ύX‚·‚é(Å‰‚̃N[ƒ‹ƒ_ƒEƒ“‚ªŽn‚Ü‚é‚܂ł͂ǂ̎žŠÔ‘тłà‚È‚¢)
        _InEntryTime = false;
        _InWarmUpTime = false;
        _InAttackTime = false;
        _InCoolDownTime = false;

        // ŒÅ’èî•ñ‚ð‰Šú‰»
        initFixedInfo();
        
        // ƒ‚ƒ“ƒXƒ^[”z’u‚̏‰Šú‰»
        LoadMysteriousBox();
        InitKeyBoxSpawns();
        LoadPhysicalMonsters();
        LoadMagicalMonsters();
        InitLocationShadowSpawns();
        InitExecutionerSpawns();
        LoadDukeMonsters();
        LoadEmperorsGraveMonsters();
        
        // Å‰‚̃N[ƒ‹ƒ_ƒEƒ“ŽžŠÔ‚Ɉڍs‚·‚éƒ^ƒXƒN‚ðŽdž‚Þ
        _ChangeCoolDownTimeTask =
            ThreadPoolManager.getInstance().scheduleEffect(new ChangeCoolDownTime(),Config.FS_TIME_ATTACK * 60000);
        
    }

    // ŒÅ’èî•ñ‚̏‰Šú‰»
    protected void initFixedInfo()
    {
        // —ì•_ŠÇ—l‚Æ’jŽÝ‚̉ƒeƒŒƒ|[ƒgÀ•W‚Ì‘g‚ݍ‡‚킹‚ðì¬
        _StartHallSpawns.clear();
        _StartHallSpawns.put(31921,_StartHallSpawn[0]);    // ª•žŽÒ‚Ì—ì•_
        _StartHallSpawns.put(31922,_StartHallSpawn[1]);    // Žx”zŽÒ‚Ì—ì•_
        _StartHallSpawns.put(31923,_StartHallSpawn[2]);    // ‘匫ŽÒ‚Ì—ì•_
        _StartHallSpawns.put(31924,_StartHallSpawn[3]);    // R”»ŽÒ‚Ì—ì•_
        
        // ‰ï“°–å”ԂƃhƒA‚Ì‘g‚ݍ‡‚킹‚ðì¬
        _HallGateKeepers.clear();
        _HallGateKeepers.put(31925, 25150012);  // ª•žŽÒ‚Ì—ì•_F’jŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31926, 25150013);  // ª•žŽÒ‚Ì—ì•_FŽqŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31927, 25150014);  // ª•žŽÒ‚Ì—ì•_F”ŒŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31928, 25150015);  // ª•žŽÒ‚Ì—ì•_FŒòŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31929, 25150016);  // ª•žŽÒ‚Ì—ì•_FŒöŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31930, 25150002);  // Žx”zŽÒ‚Ì—ì•_F’jŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31931, 25150003);  // Žx”zŽÒ‚Ì—ì•_FŽqŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31932, 25150004);  // Žx”zŽÒ‚Ì—ì•_F”ŒŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31933, 25150005);  // Žx”zŽÒ‚Ì—ì•_FŒòŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31934, 25150006);  // Žx”zŽÒ‚Ì—ì•_FŒöŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31935, 25150032);  // ‘匫ŽÒ‚Ì—ì•_F’jŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31936, 25150033);  // ‘匫ŽÒ‚Ì—ì•_FŽqŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31937, 25150034);  // ‘匫ŽÒ‚Ì—ì•_F”ŒŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31938, 25150035);  // ‘匫ŽÒ‚Ì—ì•_FŒòŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31939, 25150036);  // ‘匫ŽÒ‚Ì—ì•_FŒöŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31940, 25150022);  // R”»ŽÒ‚Ì—ì•_F’jŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31941, 25150023);  // R”»ŽÒ‚Ì—ì•_FŽqŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31942, 25150024);  // R”»ŽÒ‚Ì—ì•_F”ŒŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31943, 25150025);  // R”»ŽÒ‚Ì—ì•_FŒòŽÝ‚̉–å”Ô
        _HallGateKeepers.put(31944, 25150026);  // R”»ŽÒ‚Ì—ì•_FŒöŽÝ‚̉–å”Ô
        
        // Œ®‚Ì” ‚ðoŒ»‚³‚¹‚郂ƒ“ƒXƒ^[‚ÆŒ®‚Ì” ‚Ì‘g‚ݍ‡‚킹
        _KeyBoxNpc.clear();
        _KeyBoxNpc.put(18120,31455);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18121,31455);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18122,31455);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18123,31455);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18124,31456);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18125,31456);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18126,31456);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18127,31456);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18128,31457);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18129,31457);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18130,31457);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18131,31457);	//ƒnƒŠƒVƒƒ‚Ì•Š¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18149,31458);	//•æ’n‚̍b’Ž,Œ®‚Ì” 
        _KeyBoxNpc.put(18150,31459);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18151,31459);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18152,31459);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18153,31459);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18154,31460);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18155,31460);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18156,31460);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18157,31460);	//ƒP[ƒvƒS[ƒg,Œ®‚Ì” 
        _KeyBoxNpc.put(18158,31461);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18159,31461);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18160,31461);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18161,31461);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18162,31462);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18163,31462);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18164,31462);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18165,31462);	//ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ,Œ®‚Ì” 
        _KeyBoxNpc.put(18183,31463);	//ƒnƒŠƒVƒƒ‚̊ēŠ¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18184,31464);	//ƒnƒŠƒVƒƒ‚̊ēŠ¯,Œ®‚Ì” 
        _KeyBoxNpc.put(18212,31465);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
        _KeyBoxNpc.put(18213,31465);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
        _KeyBoxNpc.put(18214,31465);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
        _KeyBoxNpc.put(18215,31465);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
        _KeyBoxNpc.put(18216,31466);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
        _KeyBoxNpc.put(18217,31466);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
        _KeyBoxNpc.put(18218,31466);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
        _KeyBoxNpc.put(18219,31466);	//ƒnƒŠƒVƒƒ ƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[,Œ®‚Ì” 
     
        // ƒP[ƒvƒR[ƒh‚ƃnƒŠƒVƒƒ‚ÌŽ·sŽÒ‚Ì‘g‚ݍ‡‚킹
        _Victim.clear();
        _Victim.put(18150,18158);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ
        _Victim.put(18151,18159);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ
        _Victim.put(18152,18160);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ
        _Victim.put(18153,18161);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ
        _Victim.put(18154,18162);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ
        _Victim.put(18155,18163);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ
        _Victim.put(18156,18164);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ
        _Victim.put(18157,18165);	// ƒP[ƒvƒS[ƒg,ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ

    }

    // “ä‚Ì” ‚Ìspawnƒf[ƒ^‚̓ǂݍž‚Ý
    private void LoadMysteriousBox()
    {
        java.sql.Connection con = null;
        
        // “ä‚Ì” ‚̏oŒ»À•Wî•ñ‚ðƒNƒŠƒA
        _MysteriousBoxSpawns.clear();

        // “ä‚Ì” ‚̏oŒ»À•Wî•ñ‚ðì¬
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            PreparedStatement statement = con.prepareStatement("SELECT id, count, npc_templateid, locx, locy, locz, heading, respawn_delay, key_npc_id FROM four_sepulchers_spawnlist Where spawntype = ? ORDER BY id");
            statement.setInt(1, 0);
            ResultSet rset = statement.executeQuery();

            L2Spawn spawnDat;
            L2NpcTemplate template1;

            while (rset.next())
            {
                template1 = NpcTable.getInstance().getTemplate(rset.getInt("npc_templateid"));
                if (template1 != null)
                {
                	spawnDat = new L2Spawn(template1);
                	spawnDat.setAmount(rset.getInt("count"));
                	spawnDat.setLocx(rset.getInt("locx"));
                	spawnDat.setLocy(rset.getInt("locy"));
                	spawnDat.setLocz(rset.getInt("locz"));
                	spawnDat.setHeading(rset.getInt("heading"));
                	spawnDat.setRespawnDelay(rset.getInt("respawn_delay"));
                	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                	int keyNpcId = rset.getInt("key_npc_id");
                    _MysteriousBoxSpawns.put(keyNpcId,spawnDat);
                }
                else {
                    _log.warning("FourSepulchersManager.LoadMysteriousBox: Data missing in NPC table for ID: " + rset.getInt("npc_templateid") + ".");
                }
            }

            rset.close();
            statement.close();
            _log.info("FourSepulchersManager.LoadMysteriousBox: Loaded " + _MysteriousBoxSpawns.size() + " Mysterious-Box spawn locations.");
        }
        catch (Exception e)
        {
            // problem with initializing spawn, go to next one
            _log.warning("FourSepulchersManager.LoadMysteriousBox: Spawn could not be initialized: " + e);
        }
        finally
        {
            try { con.close(); } catch (Exception e) {}
        }
    }

    // Œ®‚Ì” ‚Ìspawnƒf[ƒ^‚̍쐬
    private void InitKeyBoxSpawns()
    {
    	L2Spawn spawnDat;
        L2NpcTemplate template;

        for(int keyNpcId:_KeyBoxNpc.keySet())
        {
            try
            {
                template = NpcTable.getInstance().getTemplate(_KeyBoxNpc.get(keyNpcId));
                if (template != null)
                {
                	spawnDat = new L2Spawn(template);
                	spawnDat.setAmount(1);
                	spawnDat.setLocx(0);
                	spawnDat.setLocy(0);
                	spawnDat.setLocz(0);
                	spawnDat.setHeading(0);
                	spawnDat.setRespawnDelay(3600);
                	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                	_KeyBoxSpawns.put(keyNpcId, spawnDat);
                }
                else {
                    _log.warning("FourSepulchersManager.InitKeyBoxSpawns: Data missing in NPC table for ID: " + _KeyBoxNpc.get(keyNpcId) + ".");
                }
            }
            catch (Exception e)
            {
                _log.warning("FourSepulchersManager.InitKeyBoxSpawns: Spawn could not be initialized: " + e);
            }
        }
    }
    
    // •¨—ƒ^ƒCƒv‚Ìspawnƒf[ƒ^‚̓ǂݍž‚Ý
    private void LoadPhysicalMonsters()
    {

    	// ƒ‚ƒ“ƒXƒ^[oŒ»ƒŠƒXƒg‚ð‰Šú‰»
    	_PhysicalMonsters.clear();

    	// “ǂݍž‚܂ꂽoŒ»ƒŠƒXƒg‚̐”
    	int loaded = 0;
    	java.sql.Connection con = null;
    	
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            
            // oŒ»‚Ì‚«‚Á‚©‚¯‚ƂȂéNPC‚̃‹[ƒv
            PreparedStatement statement1 = con.prepareStatement("SELECT Distinct key_npc_id FROM four_sepulchers_spawnlist Where spawntype = ? ORDER BY key_npc_id");
            statement1.setInt(1, 1);
            ResultSet rset1 = statement1.executeQuery();
            while (rset1.next())
            {
            	// oŒ»‚·‚郂ƒ“ƒXƒ^[‚̍À•WƒŠƒXƒgì¬‚̃‹[ƒv
            	int keyNpcId = rset1.getInt("key_npc_id");

                PreparedStatement statement2 = con.prepareStatement("SELECT id, count, npc_templateid, locx, locy, locz, heading, respawn_delay, key_npc_id FROM four_sepulchers_spawnlist Where key_npc_id = ? and spawntype = ? ORDER BY id");
                statement2.setInt(1, keyNpcId);
                statement2.setInt(2, 1);
                ResultSet rset2 = statement2.executeQuery();

                L2Spawn spawnDat;
                L2NpcTemplate template1;

                // ƒ‚ƒ“ƒXƒ^[ƒŠƒXƒg‚ð‰Šú‰»
                _PhysicalSpawns = new FastList<L2Spawn>();

                while (rset2.next())
                {
                    template1 = NpcTable.getInstance().getTemplate(rset2.getInt("npc_templateid"));
                    if (template1 != null)
                    {
                    	spawnDat = new L2Spawn(template1);
                    	spawnDat.setAmount(rset2.getInt("count"));
                    	spawnDat.setLocx(rset2.getInt("locx"));
                    	spawnDat.setLocy(rset2.getInt("locy"));
                    	spawnDat.setLocz(rset2.getInt("locz"));
                    	spawnDat.setHeading(rset2.getInt("heading"));
                    	spawnDat.setRespawnDelay(rset2.getInt("respawn_delay"));
                    	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                    	_PhysicalSpawns.add(spawnDat);
                    	loaded++;
                    }
                    else {
                        _log.warning("FourSepulchersManager.LoadPhysicalMonsters: Data missing in NPC table for ID: " + rset2.getInt("npc_templateid") + ".");
                    }
                }

                rset2.close();
                statement2.close();
            	_PhysicalMonsters.put(keyNpcId,_PhysicalSpawns);
            }

            rset1.close();
            statement1.close();
            _log.info("FourSepulchersManager.LoadPhysicalMonsters: Loaded " + loaded + " Physical type monsters spawn locations.");
        }
        catch (Exception e)
        {
            // problem with initializing spawn, go to next one
            _log.warning("FourSepulchersManager.LoadPhysicalMonsters: Spawn could not be initialized: " + e);
        }
        finally
        {
            try { con.close(); } catch (Exception e) {}
        }
    }
    
    // –‚–@ƒ^ƒCƒv‚Ìspawnƒf[ƒ^‚̓ǂݍž‚Ý
    private void LoadMagicalMonsters()
    {

    	// ƒ‚ƒ“ƒXƒ^[oŒ»ƒŠƒXƒg‚ð‰Šú‰»
    	_MagicalMonsters.clear();

    	// “ǂݍž‚܂ꂽoŒ»ƒŠƒXƒg‚̐”
    	int loaded = 0;
    	java.sql.Connection con = null;
    	
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            
            // oŒ»‚Ì‚«‚Á‚©‚¯‚ƂȂéNPC‚̃‹[ƒv
            PreparedStatement statement1 = con.prepareStatement("SELECT Distinct key_npc_id FROM four_sepulchers_spawnlist Where spawntype = ? ORDER BY key_npc_id");
            statement1.setInt(1, 2);
            ResultSet rset1 = statement1.executeQuery();
            while (rset1.next())
            {
            	// oŒ»‚·‚郂ƒ“ƒXƒ^[‚̍À•WƒŠƒXƒgì¬‚̃‹[ƒv
            	int keyNpcId = rset1.getInt("key_npc_id");

                PreparedStatement statement2 = con.prepareStatement("SELECT id, count, npc_templateid, locx, locy, locz, heading, respawn_delay, key_npc_id FROM four_sepulchers_spawnlist Where key_npc_id = ? and spawntype = ? ORDER BY id");
                statement2.setInt(1, keyNpcId);
                statement2.setInt(2, 2);
                ResultSet rset2 = statement2.executeQuery();

                L2Spawn spawnDat;
                L2NpcTemplate template1;

                // ƒ‚ƒ“ƒXƒ^[ƒŠƒXƒg‚ð‰Šú‰»
                _MagicalSpawns = new FastList<L2Spawn>();            	

                while (rset2.next())
                {
                    template1 = NpcTable.getInstance().getTemplate(rset2.getInt("npc_templateid"));
                    if (template1 != null)
                    {
                    	spawnDat = new L2Spawn(template1);
                    	spawnDat.setAmount(rset2.getInt("count"));
                    	spawnDat.setLocx(rset2.getInt("locx"));
                    	spawnDat.setLocy(rset2.getInt("locy"));
                    	spawnDat.setLocz(rset2.getInt("locz"));
                    	spawnDat.setHeading(rset2.getInt("heading"));
                    	spawnDat.setRespawnDelay(rset2.getInt("respawn_delay"));
                    	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                    	_MagicalSpawns.add(spawnDat);
                    	loaded++;
                    }
                    else {
                        _log.warning("FourSepulchersManager.LoadMagicalMonsters: Data missing in NPC table for ID: " + rset2.getInt("npc_templateid") + ".");
                    }
                }

                rset2.close();
                statement2.close();
                _MagicalMonsters.put(keyNpcId,_MagicalSpawns);
            }

            rset1.close();
            statement1.close();
            _log.info("FourSepulchersManager.LoadMagicalMonsters: Loaded " + loaded + " Magical type monsters spawn locations.");
        }
        catch (Exception e)
        {
            // problem with initializing spawn, go to next one
            _log.warning("FourSepulchersManager.LoadMagicalMonsters: Spawn could not be initialized: " + e);
        }
        finally
        {
            try { con.close(); } catch (Exception e) {}
        }
    }
    
    // ŒöŽÝ‚̉‚ÌŸr–ÅŒã‚ɍďoŒ»‚·‚郂ƒ“ƒXƒ^[‚Ìspawnƒf[ƒ^‚̓ǂݍž‚Ý
    private void LoadDukeMonsters()
    {

    	// ƒ‚ƒ“ƒXƒ^[oŒ»ƒŠƒXƒg‚ð‰Šú‰»
    	_DukeFinalMobs.clear();
    	_ArchonSpawned.clear();

    	// “ǂݍž‚܂ꂽoŒ»ƒŠƒXƒg‚̐”
    	int loaded = 0;
    	java.sql.Connection con = null;
    	
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            
            // oŒ»‚Ì‚«‚Á‚©‚¯‚ƂȂéNPC‚̃‹[ƒv
            PreparedStatement statement1 = con.prepareStatement("SELECT Distinct key_npc_id FROM four_sepulchers_spawnlist Where spawntype = ? ORDER BY key_npc_id");
            statement1.setInt(1, 5);
            ResultSet rset1 = statement1.executeQuery();
            while (rset1.next())
            {
            	// oŒ»‚·‚郂ƒ“ƒXƒ^[‚̍À•WƒŠƒXƒgì¬‚̃‹[ƒv
            	int keyNpcId = rset1.getInt("key_npc_id");

                PreparedStatement statement2 = con.prepareStatement("SELECT id, count, npc_templateid, locx, locy, locz, heading, respawn_delay, key_npc_id FROM four_sepulchers_spawnlist Where key_npc_id = ? and spawntype = ? ORDER BY id");
                statement2.setInt(1, keyNpcId);
                statement2.setInt(2, 5);
                ResultSet rset2 = statement2.executeQuery();

                L2Spawn spawnDat;
                L2NpcTemplate template1;

                // ƒ‚ƒ“ƒXƒ^[ƒŠƒXƒg‚ð‰Šú‰»
                _DukeFinalSpawns = new FastList<L2Spawn>();

                while (rset2.next())
                {
                    template1 = NpcTable.getInstance().getTemplate(rset2.getInt("npc_templateid"));
                    if (template1 != null)
                    {
                    	spawnDat = new L2Spawn(template1);
                    	spawnDat.setAmount(rset2.getInt("count"));
                    	spawnDat.setLocx(rset2.getInt("locx"));
                    	spawnDat.setLocy(rset2.getInt("locy"));
                    	spawnDat.setLocz(rset2.getInt("locz"));
                    	spawnDat.setHeading(rset2.getInt("heading"));
                    	spawnDat.setRespawnDelay(rset2.getInt("respawn_delay"));
                    	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                    	_DukeFinalSpawns.add(spawnDat);
                    	loaded++;
                    }
                    else {
                        _log.warning("FourSepulchersManager.LoadDukeMonsters: Data missing in NPC table for ID: " + rset2.getInt("npc_templateid") + ".");
                    }
                }

                rset2.close();
                statement2.close();
                _DukeFinalMobs.put(keyNpcId,_DukeFinalSpawns);
                _ArchonSpawned.put(keyNpcId, false);
            }

            rset1.close();
            statement1.close();
            _log.info("FourSepulchersManager.LoadDukeMonsters: Loaded " + loaded + " Church of duke monsters spawn locations.");
        }
        catch (Exception e)
        {
            // problem with initializing spawn, go to next one
            _log.warning("FourSepulchersManager.LoadDukeMonsters: Spawn could not be initialized: " + e);
        }
        finally
        {
            try { con.close(); } catch (Exception e) {}
        }
    }
    
    // ƒEƒBƒSƒbƒg‚Ì—H—ì‚ÆƒnƒŠƒVƒƒ‚Ì•ó” ‚Ìspawnƒf[ƒ^‚̓ǂݍž‚Ý
    private void LoadEmperorsGraveMonsters()
    {

    	// ƒ‚ƒ“ƒXƒ^[oŒ»ƒŠƒXƒg‚ð‰Šú‰»
    	_EmperorsGraveNpcs.clear();

    	// “ǂݍž‚܂ꂽoŒ»ƒŠƒXƒg‚̐”
    	int loaded = 0;
    	java.sql.Connection con = null;
    	
        try
        {
            con = L2DatabaseFactory.getInstance().getConnection();
            
            // oŒ»‚Ì‚«‚Á‚©‚¯‚ƂȂéNPC‚̃‹[ƒv
            PreparedStatement statement1 = con.prepareStatement("SELECT Distinct key_npc_id FROM four_sepulchers_spawnlist Where spawntype = ? ORDER BY key_npc_id");
            statement1.setInt(1, 6);
            ResultSet rset1 = statement1.executeQuery();
            while (rset1.next())
            {
            	// oŒ»‚·‚郂ƒ“ƒXƒ^[‚̍À•WƒŠƒXƒgì¬‚̃‹[ƒv
            	int keyNpcId = rset1.getInt("key_npc_id");

                PreparedStatement statement2 = con.prepareStatement("SELECT id, count, npc_templateid, locx, locy, locz, heading, respawn_delay, key_npc_id FROM four_sepulchers_spawnlist Where key_npc_id = ? and spawntype = ? ORDER BY id");
                statement2.setInt(1, keyNpcId);
                statement2.setInt(2, 6);
                ResultSet rset2 = statement2.executeQuery();

                L2Spawn spawnDat;
                L2NpcTemplate template1;

                // ƒ‚ƒ“ƒXƒ^[ƒŠƒXƒg‚ð‰Šú‰»
                _EmperorsGraveSpawns = new FastList<L2Spawn>();

                while (rset2.next())
                {
                    template1 = NpcTable.getInstance().getTemplate(rset2.getInt("npc_templateid"));
                    if (template1 != null)
                    {
                    	spawnDat = new L2Spawn(template1);
                    	spawnDat.setAmount(rset2.getInt("count"));
                    	spawnDat.setLocx(rset2.getInt("locx"));
                    	spawnDat.setLocy(rset2.getInt("locy"));
                    	spawnDat.setLocz(rset2.getInt("locz"));
                    	spawnDat.setHeading(rset2.getInt("heading"));
                    	spawnDat.setRespawnDelay(rset2.getInt("respawn_delay"));
                    	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                    	_EmperorsGraveSpawns.add(spawnDat);
                    	loaded++;
                    }
                    else {
                        _log.warning("FourSepulchersManager.LoadEmperorsGraveMonsters: Data missing in NPC table for ID: " + rset2.getInt("npc_templateid") + ".");
                    }
                }

                rset2.close();
                statement2.close();
                _EmperorsGraveNpcs.put(keyNpcId,_EmperorsGraveSpawns);
            }

            rset1.close();
            statement1.close();
            _log.info("FourSepulchersManager.LoadEmperorsGraveMonsters: Loaded " + loaded + " Emperor's grave NPC spawn locations.");
        }
        catch (Exception e)
        {
            // problem with initializing spawn, go to next one
            _log.warning("FourSepulchersManager.LoadEmperorsGraveMonsters: Spawn could not be initialized: " + e);
        }
        finally
        {
            try { con.close(); } catch (Exception e) {}
        }
    }
    
    // ƒnƒŠƒVƒƒƒVƒƒƒh[‚Ìspawnƒf[ƒ^‚̍쐬
    protected void InitLocationShadowSpawns()
    {
    	int locNo = Rnd.get(4);
    	final int[] gateKeeper = {31929,31934,31939,31944};
    	
    	L2Spawn spawnDat;
        L2NpcTemplate template;

        // oŒ»À•Wî•ñ‚ðƒNƒŠƒA
        _ShadowSpawns.clear();

        // ¡‰ñ‚̏oŒ»À•Wî•ñ‚ðì¬
        for(int i=0;i<=3;i++)
    	{
            template = NpcTable.getInstance().getTemplate(_ShadowSpawnLoc[locNo][i][0]);
            if (template != null)
            {
            	try
            	{
                	spawnDat = new L2Spawn(template);
                	spawnDat.setAmount(1);
                	spawnDat.setLocx(_ShadowSpawnLoc[locNo][i][1]);
                	spawnDat.setLocy(_ShadowSpawnLoc[locNo][i][2]);
                	spawnDat.setLocz(_ShadowSpawnLoc[locNo][i][3]);
                	spawnDat.setHeading(_ShadowSpawnLoc[locNo][i][4]);
                	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                	int keyNpcId = gateKeeper[i];
                	_ShadowSpawns.put(keyNpcId,spawnDat);
            	}
            	catch(Exception e)
            	{
            		_log.warning(e.getMessage());
            		e.printStackTrace();
            	}
            }
            else {
                _log.warning("FourSepulchersManager.InitLocationShadowSpawns: Data missing in NPC table for ID: " + _ShadowSpawnLoc[locNo][i][0] + ".");
            }
    	}
    }

    // ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ‚Ìspawnƒf[ƒ^‚̍쐬
    protected void InitExecutionerSpawns()
    {
    	L2Spawn spawnDat;
        L2NpcTemplate template;

        for(int keyNpcId:_Victim.keySet())
        {
            try
            {
                template = NpcTable.getInstance().getTemplate(_Victim.get(keyNpcId));
                if (template != null)
                {
                	spawnDat = new L2Spawn(template);
                	spawnDat.setAmount(1);
                	spawnDat.setLocx(0);
                	spawnDat.setLocy(0);
                	spawnDat.setLocz(0);
                	spawnDat.setHeading(0);
                	spawnDat.setRespawnDelay(3600);
                	SpawnTable.getInstance().addNewSpawn(spawnDat, false);
                	_ExecutionerSpawns.put(keyNpcId, spawnDat);
                }
                else {
                    _log.warning("FourSepulchersManager.InitExecutionerSpawns: Data missing in NPC table for ID: " + _Victim.get(keyNpcId) + ".");
                }
            }
            catch (Exception e)
            {
                _log.warning("FourSepulchersManager.InitExecutionerSpawns: Spawn could not be initialized: " + e);
            }
        }
    }
    
    // Žó•tŽžŠÔ‚©ƒ`ƒFƒbƒN
    public boolean IsEntryTime()
    {
    	return _InEntryTime;
    }
    
    // —ì•_U—ªŽžŠÔ‚©ƒ`ƒFƒbƒN
    public boolean IsAttackTime()
    {
    	return _InAttackTime;
    }
    
    // —ì•_‚̐\‚µž‚Ý‚ª‰Â”\‚©‚Ç‚¤‚©‚ðƒ`ƒFƒbƒN
    public synchronized boolean IsEnableEntry(int npcId,L2PcInstance player)
    {
        // Žó•tŽžŠÔŠO‚È‚ç‚Ύ󂯕t‚¯‚È‚¢
        if(!IsEntryTime()) return false;
        
        // Šù‚É‘¼‚̃vƒŒƒCƒ„[‚ª\‚µž‚ñ‚Å‚¢‚éê‡‚͎󂯕t‚¯‚È‚¢
        else if(_HallInUse.get(npcId).booleanValue()) return false;

        // ŽQ‰Ál”‚ÌŠm”F
        else if(Config.FS_PARTY_MEMBER_COUNT > 1)    // Config‚Ń\ƒ‚ł̒§í‚ª‹–‚³‚ê‚Ä‚¢‚È‚¢‚΂ ‚¢
        {
        	// ƒvƒŒƒCƒ„[‚̓p[ƒeƒB‚ð‘g‚ñ‚Å‚¢‚邱‚Æ
        	if(player.getParty() == null) return false;
        		
        	// ƒvƒŒƒCƒ„[‚̓p[ƒeƒBƒŠ[ƒ_[‚Å‚ ‚邱‚Æ
        	if(!player.getParty().isLeader(player)) return false;
        	
            // ƒvƒŒƒCƒ„[‚Í‹K’èl”ˆÈã‚Ńp[ƒeƒB‚ð‘g‚ñ‚Å‚¢‚邱‚Æ
            if (player.getParty().getMemberCount() < Config.FS_PARTY_MEMBER_COUNT) return false;

            else
            {
                for (L2PcInstance mem : player.getParty().getPartyMembers())
                {
                    // ƒp[ƒeƒBƒƒ“ƒo[‘Sˆõ‚ªƒNƒGƒXƒgu‚S‚‚̔tv‚ðŽó‚¯‚Ä‚¢‚邱‚Æ
                    if(mem.getQuestState(_QuestId).get("<state>") == null) return false;
                    // ƒp[ƒeƒBƒƒ“ƒo[‘Sˆõ‚ªu—ì•_‚̒ʍsØv‚ðŽ‚Á‚Ä‚¢‚邱‚Æ
                    if (mem.getInventory().getItemByItemId(_EntrancePass) == null) return false;

                    // ƒCƒ“ƒxƒ“ƒgƒŠ“à‚̃AƒCƒeƒ€”‚ª80%–¢–ž‚Å‚ ‚邱‚Æ
                    int invLimitCnt = mem.GetInventoryLimit();
                    int invItemCnt = mem.getInventory().getItems().length;
                    if((invItemCnt / invLimitCnt) >= 0.8) return false;
                    
                    // ƒCƒ“ƒxƒ“ƒgƒŠ‚̏d—Ê‚ª80%–¢–ž‚Å‚ ‚邱‚Æ
                    int invLimitWeight = mem.getMaxLoad();
                    int invWeight = mem.getInventory().getTotalWeight();
                    if((invWeight / invLimitWeight) >= 0.8) return false;
                }
            }
        }
        else    // ƒ\ƒ‚̏ꍇ
        {
            // ’§íŽÒ‚̓NƒGƒXƒgu‚S‚‚̔tv‚ðŽó‚¯‚Ä‚¢‚邱‚Æ
            if(player.getQuestState(_QuestId).get("<state>") == null) return false;
            // ’§íŽÒ‚́u—ì•_‚̒ʍsØv‚ðŽ‚Á‚Ä‚¢‚邱‚Æ
            if(player.getInventory().getItemByItemId(_EntrancePass) == null) return false;
            
            // ƒCƒ“ƒxƒ“ƒgƒŠ“à‚̃AƒCƒeƒ€”‚ª80%–¢–ž‚Å‚ ‚邱‚Æ
            int invLimitCnt = player.GetInventoryLimit();
            int invItemCnt = player.getInventory().getItems().length;
            if((invItemCnt / invLimitCnt) >= 0.8) return false;
            
            // ƒCƒ“ƒxƒ“ƒgƒŠ‚̏d—Ê‚ª80%–¢–ž‚Å‚ ‚邱‚Æ
            int invLimitWeight = player.getMaxLoad();
            int invWeight = player.getInventory().getTotalWeight();
            if((invWeight / invLimitWeight) >= 0.8) return false;
        }

        // ‚·‚ׂĂ̔»’è‚ð’ʉ߂·‚ê‚Η˜—p‰Â”\
        return true;
    }
    
    // ’§íŽÒƒp[ƒeƒB‚ð“o˜^‚µA’jŽÝ‚̉‚ÖƒeƒŒƒ|[ƒg‚³‚¹‚é
    public void Entry(int npcId, L2PcInstance player)
	{
		// ’§íŽÒƒp[ƒeƒB‚ð’jŽÝ‚̉‚ÖƒeƒŒƒ|[ƒg
		// ƒeƒŒƒ|[ƒgÀ•W‚̎擾
		int[] Location = _StartHallSpawns.get(npcId);
		int driftx;
		int drifty;

		// ƒeƒŒƒ|[ƒg
		if (Config.FS_PARTY_MEMBER_COUNT > 1) // Config‚Ń\ƒ‚ł̒§í‚ª‹–‚³‚ê‚Ä‚¢‚È‚¢‚΂ ‚¢
		{
			// —ì•_‚̐\‚µž‚ÝðŒ‚ðÄŠm”F
			if (IsEnableEntry(npcId, player))
			{
				List<L2PcInstance> members = new FastList<L2PcInstance>(); // ƒeƒŒƒ|[ƒg‰Â”\‚ȃƒ“ƒo[‚ÌƒŠƒXƒg
				for (L2PcInstance mem : player.getParty().getPartyMembers())
				{
					// ƒƒ“ƒo[‚ª—ì•_‚̒ʍsØ‚ðŽ‚Á‚Ä‚¢‚āA¶‚«‚Ä‚¢‚āAƒp[ƒeƒBƒŠ[ƒ_[‚Ì”Fޝ”͈͓à‚É‚¢‚ê‚΁AƒeƒŒƒ|[ƒg‚³‚¹‚é
					if (!mem.isDead() && Util.checkIfInRange(700, player, mem, true))
					{
						members.add(mem);
					}
				}

				for (L2PcInstance mem : members)
				{
					// ’jŽÝ‚̉‚ÖƒeƒŒƒ|[ƒg‚·‚é
					driftx = Rnd.get(-80, 80);
					drifty = Rnd.get(-80, 80);
					mem.teleToLocation(Location[0] + driftx, Location[1] + drifty, Location[2]);
					// —ì•_‚̒ʍsØ‚ðƒCƒ“ƒxƒ“ƒgƒŠ‚©‚çÁ‚·
					mem.destroyItemByItemId("Quest", _EntrancePass, 1, mem,true);
					// ŒÃ‚¢ƒuƒ[ƒ`‚ðŽ‚Á‚Ä‚¢‚È‚¯‚ê‚ÎŽg—pÏ‚Ý—ì•_‚̒ʍsØ‚ðƒCƒ“ƒxƒ“ƒgƒŠ‚É“ü‚ê‚é
                    if (mem.getInventory().getItemByItemId(_OldBrooch) == null)
                    {
						mem.addItem("Quest", _UsedEntrancePass, 1, mem, true);
                    }

					// •s³–hŽ~‚Ì‚½‚߁A‰ï“°‚ÌŒ®‚ð‘S‚ďÁ‚·
					L2ItemInstance HallsKey = mem.getInventory().getItemByItemId(_HallsKey);
	                if(HallsKey != null)
	                {
	                    // ‰ï“°‚ÌŒ®‚ðƒCƒ“ƒxƒ“ƒgƒŠ‚©‚çÁ‚·
	                	mem.destroyItemByItemId("Quest", _HallsKey, HallsKey.getCount(), mem, true);
	                }
				}

				// —ì•_ŠÇ—l‚Ƀp[ƒeƒBƒŠ[ƒ_[‚ðŠÖŒW•t‚¯‚é
				_Challengers.remove(npcId);
				_Challengers.put(npcId, player);

				// —ì•_‚Ì—˜—pó‹µ‚ðXV‚·‚é
				_HallInUse.remove(npcId);
				_HallInUse.put(npcId, true);
			}
			else
			{
				SystemMessage sm = new SystemMessage(SystemMessage.S1_S2);
				sm.addString("ðŒ‚ð–ž‚½‚µ‚Ä‚¢‚È‚¢‚½‚߁A“üê‚ª‹‘”Û‚³‚ê‚Ü‚µ‚½B");
				player.sendPacket(sm);
			}
		}
		else
		// ƒ\ƒ‚̏ꍇ
		{
			// —ì•_‚̐\‚µž‚ÝðŒ‚ðÄŠm”F
			if (IsEnableEntry(npcId, player))
			{
				// ’jŽÝ‚̉‚ÖƒeƒŒƒ|[ƒg‚·‚é
				driftx = Rnd.get(-80, 80);
				drifty = Rnd.get(-80, 80);
				player.teleToLocation(Location[0] + driftx, Location[1] + drifty, Location[2]);
				// —ì•_‚̒ʍsØ‚ðƒCƒ“ƒxƒ“ƒgƒŠ‚©‚çÁ‚·
				player.destroyItemByItemId("Quest", _EntrancePass, 1, player, true);
				// ŒÃ‚¢ƒuƒ[ƒ`‚ðŽ‚Á‚Ä‚¢‚È‚¯‚ê‚ÎŽg—pÏ‚Ý—ì•_‚̒ʍsØ‚ðƒCƒ“ƒxƒ“ƒgƒŠ‚É“ü‚ê‚é
                if (player.getInventory().getItemByItemId(_OldBrooch) == null)
                {
                	player.addItem("Quest", _UsedEntrancePass, 1, player, true);
                }

				// •s³–hŽ~‚Ì‚½‚߁A‰ï“°‚ÌŒ®‚ð‘S‚ďÁ‚·
				L2ItemInstance HallsKey = player.getInventory().getItemByItemId(_HallsKey);
                if(HallsKey != null)
                {
                    // ‰ï“°‚ÌŒ®‚ðƒCƒ“ƒxƒ“ƒgƒŠ‚©‚çÁ‚·
                	player.destroyItemByItemId("Quest", _HallsKey, HallsKey.getCount(), player, true);
                }

                // —ì•_ŠÇ—l‚Ƀp[ƒeƒBƒŠ[ƒ_[‚ðŠÖŒW•t‚¯‚é
				_Challengers.remove(npcId);
				_Challengers.put(npcId, player);

				// —ì•_‚Ì—˜—pó‹µ‚ðXV‚·‚é
				_HallInUse.remove(npcId);
				_HallInUse.put(npcId, true);
			}
			else
			{
				SystemMessage sm = new SystemMessage(SystemMessage.S1_S2);
				sm.addString("ðŒ‚ð–ž‚½‚µ‚Ä‚¢‚È‚¢‚½‚߁A“üê‚ª‹‘”Û‚³‚ê‚Ü‚µ‚½B");
				player.sendPacket(sm);
			}
		}
	}
    
    // “ä‚Ì” ‚ðoŒ»‚³‚¹‚é
    public void SpawnMysteriousBox(int npcId)
    {
    	if (!IsAttackTime()) return;
    	
    	L2Spawn spawnDat = _MysteriousBoxSpawns.get(npcId);
    	if(spawnDat != null)
    	{
        	_AllMobs.add(spawnDat.doSpawn());
        	spawnDat.stopRespawn();
    	}
    }

    // ƒ‚ƒ“ƒXƒ^[‚ðoŒ»‚³‚¹‚é
    public void SpawnMonster(int npcId)
    {
    	if (!IsAttackTime()) return;

    	FastList<L2Spawn> MonsterList;
    	List<L2SepulcherMonsterInstance> Mobs = new FastList<L2SepulcherMonsterInstance>();
    	L2Spawn KeyBoxMobSpawn;
    	
    	// •¨—ŒnA–‚–@Œn‚̂ǂ¿‚ç‚©‚ðŒˆ‚ß‚é
    	if(Rnd.get(2) == 0)	// •¨—Œn
    	{
    		MonsterList = (FastList<L2Spawn>)_PhysicalMonsters.get(npcId);
    	}
    	else				// –‚–@Œn
    	{
    		MonsterList = (FastList<L2Spawn>)_MagicalMonsters.get(npcId);
    	}
    	
    	// ƒ‚ƒ“ƒXƒ^[‚ðoŒ»‚³‚¹‚é
    	if(MonsterList != null)
    	{
    		boolean SpawnKeyBoxMob = false;
    		boolean SpawnedKeyBoxMob = false;
    		
        	for (L2Spawn spawnDat:MonsterList)
        	{
        		// ŽqŽÝ‚̉‚ÅŒ®‚Ì” ‚ðoŒ»‚³‚¹‚长’n‚̍b’Ž‚ðoŒ»‚³‚¹‚é‚©”»’è‚·‚éB
        		if(SpawnedKeyBoxMob)
        		{
        			SpawnKeyBoxMob = false;
        		}
        		else
        		{
            		switch(npcId)
            		{
            		    // ŽqŽÝ‚̉‚Ì“ä‚Ì” 
            		    case 31469:
            		    case 31474:
            		    case 31479:
            		    case 31484:
            		    	if(Rnd.get(48) == 0)
            		    	{
            		    		SpawnKeyBoxMob = true;
            		    		_log.info("FourSepulchersManager.SpawnMonster: Set to spawn Church of Viscount Key Mob.");
            		    	}
            		    	break;
        		    	default:
        		    		SpawnKeyBoxMob = false;
            		}
        		}

        		L2SepulcherMonsterInstance mob = null;

        		// Œ®‚Ì” ‚ðoŒ»‚³‚¹‚长’n‚̍b’Ž‚ðoŒ»‚³‚¹‚鏈—
        		if(SpawnKeyBoxMob)
        		{
                    try
                    {
            			L2NpcTemplate template = NpcTable.getInstance().getTemplate(18149);
                        if (template != null)
                        {
                        	KeyBoxMobSpawn = new L2Spawn(template);
                        	KeyBoxMobSpawn.setAmount(1);
                        	KeyBoxMobSpawn.setLocx(spawnDat.getLocx());
                        	KeyBoxMobSpawn.setLocy(spawnDat.getLocy());
                        	KeyBoxMobSpawn.setLocz(spawnDat.getLocz());
                        	KeyBoxMobSpawn.setHeading(spawnDat.getHeading());
                        	KeyBoxMobSpawn.setRespawnDelay(3600);
                        	SpawnTable.getInstance().addNewSpawn(KeyBoxMobSpawn, false);
                    		mob = (L2SepulcherMonsterInstance)KeyBoxMobSpawn.doSpawn();
                    		KeyBoxMobSpawn.stopRespawn();
                        }
                        else {
                            _log.warning("FourSepulchersManager.SpawnMonster: Data missing in NPC table for ID: 18149");
                        }
                    }
                    catch (Exception e)
                    {
                        _log.warning("FourSepulchersManager.SpawnMonster: Spawn could not be initialized: " + e);
                    }
        			
        			SpawnedKeyBoxMob = true;
        		}
        		else
        		{
            		mob = (L2SepulcherMonsterInstance)spawnDat.doSpawn();
                	spawnDat.stopRespawn();
        		}

        		if(mob != null)
        		{
            		mob.MysteriousBoxId = npcId;
            		switch(npcId)
            		{
            		    // ŽqŽÝ‚̉‚Ì“ä‚Ì” 
            		    case 31469:
            		    case 31474:
            		    case 31479:
            		    case 31484:
            		    // ŒöŽÝ‚̉‚Ì“ä‚Ì” 
            		    case 31472:
            		    case 31477:
            		    case 31482:
            		    case 31487:
            		    	Mobs.add(mob);
            		}
            		_AllMobs.add(mob);
        		}
        	}

        	switch(npcId)
    		{
    		    // ŽqŽÝ‚̉‚Ì“ä‚Ì” 
    		    case 31469:
    		    case 31474:
    		    case 31479:
    		    case 31484:
    		    	_ViscountMobs.put(npcId, Mobs);
    		    	break;
    		    
    		    // ŒöŽÝ‚̉‚Ì“ä‚Ì” 
    		    case 31472:
    		    case 31477:
    		    case 31482:
    		    case 31487:
    		    	_DukeMobs.put(npcId, Mobs);
    		    	break;
    		}
    	}
    }

    // ŽqŽÝ‚̉‚̃‚ƒ“ƒXƒ^[‚ÌŸr–Å‚ðŠm”F‚·‚é
    public synchronized boolean IsViscountMobsAnnihilated(int npcId)
    {
    	FastList<L2SepulcherMonsterInstance> Mobs =
    		(FastList<L2SepulcherMonsterInstance>)_ViscountMobs.get(npcId);
    	
    	if(Mobs == null) return true;
    	
    	for(L2SepulcherMonsterInstance mob:Mobs)
    	{
    		if(!mob.isDead()) return false;
    	}
    	
    	return true;
    }

    // ŒöŽÝ‚̉‚̃‚ƒ“ƒXƒ^[‚ÌŸr–Å‚ðŠm”F‚·‚é
    public synchronized boolean IsDukeMobsAnnihilated(int npcId)
    {
    	FastList<L2SepulcherMonsterInstance> Mobs =
    		(FastList<L2SepulcherMonsterInstance>)_DukeMobs.get(npcId);
    	
    	if(Mobs == null) return true;
    	
    	for(L2SepulcherMonsterInstance mob:Mobs)
    	{
    		if(!mob.isDead()) return false;
    	}
    	
    	return true;
    }

    // Œ®‚Ì” ‚ðoŒ»‚³‚¹‚é
    public void SpawnKeyBox(L2NpcInstance activeChar)
    {
    	if (!IsAttackTime()) return;

    	L2Spawn	spawnDat = _KeyBoxSpawns.get(activeChar.getNpcId());

    	if(spawnDat != null)
    	{
        	spawnDat.setAmount(1);
        	spawnDat.setLocx(activeChar.getX());
        	spawnDat.setLocy(activeChar.getY());
        	spawnDat.setLocz(activeChar.getZ());
        	spawnDat.setHeading(activeChar.getHeading());
        	spawnDat.setRespawnDelay(3600);
        	_AllMobs.add(spawnDat.doSpawn());
        	spawnDat.stopRespawn();
    		
    	}
    }
    
    // ƒnƒŠƒVƒƒ‚ÌŽ·sŽÒ‚ðoŒ»‚³‚¹‚é
    public void SpawnExecutionerOfHalisha(L2NpcInstance activeChar)
    {
    	if (!IsAttackTime()) return;

    	L2Spawn spawnDat = _ExecutionerSpawns.get(activeChar.getNpcId());

    	if(spawnDat != null)
    	{
    		spawnDat.setAmount(1);
        	spawnDat.setLocx(activeChar.getX());
        	spawnDat.setLocy(activeChar.getY());
        	spawnDat.setLocz(activeChar.getZ());
        	spawnDat.setHeading(activeChar.getHeading());
        	spawnDat.setRespawnDelay(3600);
        	_AllMobs.add(spawnDat.doSpawn());
        	spawnDat.stopRespawn();
    	}
    }

    // ƒnƒŠƒVƒƒƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[‚ðoŒ»‚³‚¹‚é
    public void SpawnArchonOfHalisha(int npcId)
    {
    	if (!IsAttackTime()) return;
    	
    	// Šù‚ɏoŒ»‚µ‚Ä‚¢‚éê‡‚Í–³Ž‹
    	if(_ArchonSpawned.get(npcId)) return;

    	FastList<L2Spawn> MonsterList = (FastList<L2Spawn>)_DukeFinalMobs.get(npcId);
    	
    	// ƒ‚ƒ“ƒXƒ^[‚ðoŒ»‚³‚¹‚é
    	if(MonsterList != null)
    	{
        	for (L2Spawn spawnDat:MonsterList)
        	{
        		L2SepulcherMonsterInstance mob = (L2SepulcherMonsterInstance)spawnDat.doSpawn();
            	spawnDat.stopRespawn();

        		if(mob != null)
        		{
            		mob.MysteriousBoxId = npcId;
            		_AllMobs.add(mob);
        		}
    		}
        	_ArchonSpawned.put(npcId, true);
    	}
    }

    // ƒEƒBƒSƒbƒg‚Ì—H—ì‚ÆƒnƒŠƒVƒƒ‚Ì•ó” ‚ðoŒ»‚³‚¹‚é
    public void SpawnEmperorsGraveNpc(int npcId)
    {
    	if (!IsAttackTime()) return;
    	
    	FastList<L2Spawn> MonsterList = (FastList<L2Spawn>)_EmperorsGraveNpcs.get(npcId);
    	
    	// ƒ‚ƒ“ƒXƒ^[‚ðoŒ»‚³‚¹‚é
    	if(MonsterList != null)
    	{
        	for (L2Spawn spawnDat:MonsterList)
        	{
        		_AllMobs.add(spawnDat.doSpawn());
            	spawnDat.stopRespawn();
    		}
    	}
    }

    // ƒnƒŠƒVƒƒƒVƒƒƒh[‚̏oŒ»À•W‚ðŒˆ’è‚·‚éB
    protected void LocationShadowSpawns()
    {
    	int locNo = Rnd.get(4);
    	_log.info("FourSepulchersManager.LocationShadowSpawns: Location index is " + locNo + ".");
    	final int[] gateKeeper = {31929,31934,31939,31944};
    	
    	L2Spawn spawnDat;

        // ¡‰ñ‚̏oŒ»À•Wî•ñ‚ðì¬
        for(int i=0;i<=3;i++)
    	{
        	int keyNpcId = gateKeeper[i];
        	spawnDat = _ShadowSpawns.get(keyNpcId);
        	spawnDat.setLocx(_ShadowSpawnLoc[locNo][i][1]);
        	spawnDat.setLocy(_ShadowSpawnLoc[locNo][i][2]);
        	spawnDat.setLocz(_ShadowSpawnLoc[locNo][i][3]);
        	spawnDat.setHeading(_ShadowSpawnLoc[locNo][i][4]);
        	_ShadowSpawns.put(keyNpcId,spawnDat);
    	}
    }

    // ƒnƒŠƒVƒƒƒVƒƒƒh[‚ðoŒ»‚³‚¹‚é
    public void SpawnShadow(int npcId)
    {
    	if (!IsAttackTime()) return;

    	L2Spawn spawnDat = _ShadowSpawns.get(npcId);
    	if(spawnDat != null)
    	{
    		L2SepulcherMonsterInstance mob = (L2SepulcherMonsterInstance)spawnDat.doSpawn();
        	spawnDat.stopRespawn();

    		if(mob != null)
    		{
        		mob.MysteriousBoxId = npcId;
        		_AllMobs.add(mob);
    		}
    	}
    }

    // ƒp[ƒeƒB‚ª‘S–Å‚µ‚½‚©‚ðŠm”F
    public synchronized boolean IsPartyAnnihilated(L2PcInstance player)
    {
		if(player.getParty() != null)
		{
			for(L2PcInstance mem:player.getParty().getPartyMembers())
			{
				if(!mem.isDead())
				{
					return false;
				}
			}
			return true;
		}
		else
		{
			return true;
		}
    }
    
    // ƒp[ƒeƒB‚ª‘S–Å‚µ‚½ê‡‚̏ˆ—A„—çŽÒ‚ÌŽ›‰@‚Ö”ò‚΂·
    public synchronized void OnPartyAnnihilated(L2PcInstance player)
    {
		if(player.getParty() != null)
		{
			for(L2PcInstance mem:player.getParty().getPartyMembers())
			{
				if(!mem.isDead()) break;
        		int driftX = Rnd.get(-80,80);
        		int driftY = Rnd.get(-80,80);
        		mem.teleToLocation(169589 + driftX,-90493 + driftY,-2914);
			}
		}
		else
		{
    		int driftX = Rnd.get(-80,80);
    		int driftY = Rnd.get(-80,80);
    		player.teleToLocation(169589 + driftX,-90493 + driftY,-2914);
    	}
    }
    
    // —ì•_“à‚̃‚ƒ“ƒXƒ^[‚ðÁ‚·
    public void DeleteAllMobs()
    {
    	_log.info("FourSepulchersManager.DeleteAllMobs: Try to delete " + _AllMobs.size() + " monsters.");

    	int delCnt = 0;
        for(L2NpcInstance mob : _AllMobs)
        {
			try
            {
				mob.getSpawn().stopRespawn();
				mob.deleteMe();
                delCnt++;
            }
            catch(Exception e)
            {
                _log.warning(e.getMessage());
            }
        }
        _AllMobs.clear();
    	_log.info("FourSepulchersManager.DeleteAllMobs: Deleted " + delCnt + " monsters.");
    }
    
    // ‚·‚ׂẲ‚̃hƒA‚ð•‚¶‚é
    protected void CloseAllDoors()
    {
    	for(int doorId:_HallGateKeepers.values())
    	{
            try
            {
            	DoorTable.getInstance().getDoor(doorId).closeMe();
            }
            catch (Exception e)
            {
                _log.warning(e.getMessage());
            }
    	}
    }

    // ŽQ‰ÁŽó•tŽžŠÔ‚É“ü‚é
    protected class ChaneEntryTime implements Runnable
    {
        public void run()
        {
            _log.info("FourSepulchersManager:In Entry Time");
            // ƒtƒ‰ƒO‚ð•ύX‚·‚é
            _InEntryTime = true;
            _InWarmUpTime = false;
            _InAttackTime = false;
            _InCoolDownTime = false;
            
            // ƒEƒH[ƒ€ƒAƒbƒvŽžŠÔ‚Ɉڍs‚·‚éƒ^ƒXƒN‚ðŽdž‚ñ‚Å‚¨‚­
            _ChaneWarmUpTimeTask =
                ThreadPoolManager.getInstance().scheduleEffect(new ChaneWarmUpTime(),Config.FS_TIME_ENTRY * 60000);

            // ŽÀs‚³‚ꂽƒ^ƒXƒN‚̃NƒŠ[ƒ“ƒAƒbƒv
            if(_ChangeEntryTimeTask != null)
            {
            	_ChangeEntryTimeTask.cancel(true);
            	_ChangeEntryTimeTask = null;
            }
        }
    }
    
    // ƒEƒH[ƒ€ƒAƒbƒvŽžŠÔ‚É“ü‚é
    protected class ChaneWarmUpTime implements Runnable
    {
        public void run()
        {
            _log.info("FourSepulchersManager:In Warm-Up Time");
            // ƒtƒ‰ƒO‚ð•ύX‚·‚é
            _InEntryTime = true;
            _InWarmUpTime = false;
            _InAttackTime = false;
            _InCoolDownTime = false;
            
            // —ì•_U—ªŽžŠÔ‚Ɉڍs‚·‚éƒ^ƒXƒN‚ðŽdž‚ñ‚Å‚¨‚­
            _ChangeAttackTimeTask =
                ThreadPoolManager.getInstance().scheduleEffect(new ChangeAttackTime(),Config.FS_TIME_WARMUP * 60000);

            // ŽÀs‚³‚ꂽƒ^ƒXƒN‚̃NƒŠ[ƒ“ƒAƒbƒv
            if(_ChaneWarmUpTimeTask != null)
            {
            	_ChaneWarmUpTimeTask.cancel(true);
            	_ChaneWarmUpTimeTask = null;
            }
        }
    }
    
    // —ì•_U—ªŽžŠÔ‚É“ü‚é
    protected class ChangeAttackTime implements Runnable
    {
        public void run()
        {
            _log.info("FourSepulchersManager:In Attack Time");
            // ƒtƒ‰ƒO‚ð•ύX‚·‚é
            _InEntryTime = false;
            _InWarmUpTime = false;
            _InAttackTime = true;
            _InCoolDownTime = false;
            
            // ƒnƒŠƒVƒƒƒVƒƒƒh[‚̏oŒ»À•W‚ðŒˆ’è‚·‚é
            LocationShadowSpawns();
            
            // ’jŽÝ‚̉‚Ì“ä‚Ì” ‚ðoŒ»‚³‚¹‚é
            SpawnMysteriousBox(31921);
            SpawnMysteriousBox(31922);
            SpawnMysteriousBox(31923);
            SpawnMysteriousBox(31924);
            
            // ƒN[ƒ‹ƒ_ƒEƒ“ƒ^ƒCƒ€‚Ɉڍs‚·‚éƒ^ƒXƒN‚ðŽdž‚ñ‚Å‚¨‚­
            _ChangeCoolDownTimeTask =
                ThreadPoolManager.getInstance().scheduleEffect(new ChangeCoolDownTime(),Config.FS_TIME_ATTACK * 60000);

            // ŽÀs‚³‚ꂽƒ^ƒXƒN‚̃NƒŠ[ƒ“ƒAƒbƒv
            if(_ChangeAttackTimeTask != null)
            {
            	_ChangeAttackTimeTask.cancel(true);
            	_ChangeAttackTimeTask = null;
            }
        }
    }

    // ƒN[ƒ‹ƒ_ƒEƒ“ƒ^ƒCƒ€‚É“ü‚é
    protected class ChangeCoolDownTime implements Runnable
    {
        
        public void run()
        {
            _log.info("FourSepulchersManager:In Cool-Down Time");
            // ƒtƒ‰ƒO‚ð•ύX‚·‚é
            _InEntryTime = false;
            _InWarmUpTime = false;
            _InAttackTime = false;
            _InCoolDownTime = true;
            
            // U—ª’†‚ÌPC‚ð„—çŽÒ‚ÌŽ›‰@‚Ö”ò‚΂·
            for(L2PcInstance player :L2World.getInstance().getAllPlayers())
            {
            	if (ZoneManager.getInstance().checkIfInZone("FourSepulcher", player) &&
            		(player.getZ() >= -7250 && player.getZ() <= -6841) &&
            		!player.isGM())
            	{
            		int driftX = Rnd.get(-80,80);
            		int driftY = Rnd.get(-80,80);
            		player.teleToLocation(169589 + driftX,-90493 + driftY,-2914);
            	}
            }
            
            // —ì•_“à‚̃‚ƒ“ƒXƒ^[—Þ‚ðÁ‚·
            DeleteAllMobs();

            // ŠJ‚¢‚Ä‚¢‚é‰Â”\«‚Ì‚ ‚é‰ï“°‚Ì”à‚ð‚·‚×‚Ä•Â‚¶‚é
            CloseAllDoors();
            
            // —ì•_‚Ì—˜—pó‘Ô‚ðƒNƒŠƒA
            _HallInUse.clear();
            _HallInUse.put(31921,false);    // ª•žŽÒ‚Ì—ì•_
            _HallInUse.put(31922,false);    // Žx”zŽÒ‚Ì—ì•_
            _HallInUse.put(31923,false);    // ‘匫ŽÒ‚Ì—ì•_
            _HallInUse.put(31924,false);    // R”»ŽÒ‚Ì—ì•_

            // ŒöŽÝ‚̉‚̃nƒŠƒVƒƒƒAƒhƒ~ƒjƒXƒgƒŒ[ƒ^[‚̏oŒ»ó‘Ô‚ðƒNƒŠƒA
            if(_ArchonSpawned.size() != 0)
            {
                Set<Integer> npcIdSet = _ArchonSpawned.keySet();
                for(int npcId:npcIdSet)
                {
                	_ArchonSpawned.put(npcId, false);
                }
            }
            
            // ŽQ‰ÁŽó•tŽžŠÔ‚Ɉڍs‚·‚éƒ^ƒXƒN‚ðŽdž‚ñ‚Å‚¨‚­
            _ChangeEntryTimeTask = 
                ThreadPoolManager.getInstance().scheduleEffect(new ChaneEntryTime(),Config.FS_TIME_COOLDOWN * 60000);

            // ŽÀs‚³‚ꂽƒ^ƒXƒN‚̃NƒŠ[ƒ“ƒAƒbƒv
            if(_ChangeCoolDownTimeTask != null)
            {
            	_ChangeCoolDownTimeTask.cancel(true);
            	_ChangeCoolDownTimeTask = null;
            }
        }
    }
}