/* * $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 _HallGateKeepers = new FastMap(); // ’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 _StartHallSpawns = new FastMap(); // ƒ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 _ShadowSpawns = new FastMap(); // —ì•_ŠÇ—l‚Æ—ì•_‚Ì—˜—pó‘Ô‚Ì‘g‚ݍ‡‚킹(<ŠÇ—l‚ÌIDA—˜—pó‘Ô(true = ’N‚©‚ªŽg‚Á‚Ä‚¢‚é)>) protected static Map _HallInUse = new FastMap(); // —ì•_ŠÇ—l‚Æ’§íŽÒƒp[ƒeƒBƒŠ[ƒ_[‚Ì‘g‚ݍ‡‚킹 protected Map _Challengers = new FastMap(); // ŠÇ—lE‰ï“°–å”Ô‚Æ“ä‚Ì” ‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹 protected Map _MysteriousBoxSpawns = new FastMap(); // “ä‚Ì” ‚ƏoŒ»‚·‚郂ƒ“ƒXƒ^[‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹i•¨—Œnj protected List _PhysicalSpawns; protected Map _PhysicalMonsters = new FastMap(); // “ä‚Ì” ‚ƏoŒ»‚·‚郂ƒ“ƒXƒ^[‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹i–‚–@Œnj protected List _MagicalSpawns; protected Map _MagicalMonsters = new FastMap(); // ŒöŽÝ‚̉‚Ì“ä‚Ì” ‚ƁAŸr–ÅŒã‚ɍďoŒ»‚·‚郂ƒ“ƒXƒ^[‚Ì‘g‚ݍ‡‚킹 protected List _DukeFinalSpawns; protected Map _DukeFinalMobs = new FastMap(); protected Map _ArchonSpawned = new FastMap(); // ƒnƒŠƒVƒƒƒVƒƒƒh[“¢”°Œã‚ɍc’é‚̕挊‚ŏoŒ»‚·‚éNPC‚Ì‘g‚ݍ‡‚킹 protected List _EmperorsGraveSpawns; protected Map _EmperorsGraveNpcs = new FastMap(); // ŽqŽÝ‚̉‚Ì“ä‚Ì” ‚ƁAoŒ»‚µ‚½ƒ‚ƒ“ƒXƒ^[‚Ì‘g‚ݍ‡‚킹 protected Map _ViscountMobs = new FastMap(); // ŒöŽÝ‚̉‚Ì“ä‚Ì” ‚ƁAoŒ»‚µ‚½ƒ‚ƒ“ƒXƒ^[‚Ì‘g‚ݍ‡‚킹 protected Map _DukeMobs = new FastMap(); // Œ®‚Ì” ‚ðoŒ»‚³‚¹‚郂ƒ“ƒXƒ^[‚ÆŒ®‚Ì” ‚Ì‘g‚ݍ‡‚킹<ƒ‚ƒ“ƒXƒ^[‚ÌNpcId,Œ®‚Ì” ‚ÌNpcId> protected Map _KeyBoxNpc = new FastMap(); protected Map _KeyBoxSpawns = new FastMap(); // ƒP[ƒvƒS[ƒg‚ƃnƒŠƒVƒƒ‚ÌŽ·sŽÒ‚Ìspawnƒf[ƒ^‚Ì‘g‚ݍ‡‚킹 protected Map _Victim = new FastMap(); protected Map _ExecutionerSpawns = new FastMap(); // —ì•_U—ªŽžŠÔ‚É—ì•_“à‚ɏoŒ»‚µ‚½‘S‚Ẵ‚ƒ“ƒXƒ^[ protected List _AllMobs = new FastList(); // ƒ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(); 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(); 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(); 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(); 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("") == 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("") == 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 members = new FastList(); // ƒ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 MonsterList; List Mobs = new FastList(); L2Spawn KeyBoxMobSpawn; // •¨—ŒnA–‚–@Œn‚̂ǂ¿‚ç‚©‚ðŒˆ‚ß‚é if(Rnd.get(2) == 0) // •¨—Œn { MonsterList = (FastList)_PhysicalMonsters.get(npcId); } else // –‚–@Œn { MonsterList = (FastList)_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 Mobs = (FastList)_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 Mobs = (FastList)_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 MonsterList = (FastList)_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 MonsterList = (FastList)_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 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; } } } }