Advertisement
BossForever

Frintezza

Jan 29th, 2017
645
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 70.63 KB | None | 0 0
  1. ### Eclipse Workspace Patch 1.0
  2. #P L2JNetwork_gameserver
  3. Index: java/net/sf/l2j/Config.java
  4. ===================================================================
  5. --- java/net/sf/l2j/Config.java (revision 5)
  6. +++ java/net/sf/l2j/Config.java (working copy)
  7. @@ -550,6 +550,11 @@
  8.     public static int SPAWN_INTERVAL_FRINTEZZA;
  9.     public static int RANDOM_SPAWN_TIME_FRINTEZZA;
  10.     public static int WAIT_TIME_FRINTEZZA;
  11. +   public static boolean BYPASS_FRINTEZZA_PARTIES_CHECK;
  12. +   public static int FRINTEZZA_MIN_PARTIES;
  13. +   public static int FRINTEZZA_MAX_PARTIES;
  14. +   public static int FRINTEZZA_TIME_CHALLENGE;
  15. +   public static int DESPAWN_TIME_FRINTEZZA;
  16.    
  17.     public static int SPAWN_INTERVAL_ORFEN;
  18.     public static int RANDOM_SPAWN_TIME_ORFEN;
  19. @@ -1528,6 +1533,11 @@
  20.             SPAWN_INTERVAL_FRINTEZZA = npcs.getProperty("FrintezzaSpawnInterval", 48);
  21.             RANDOM_SPAWN_TIME_FRINTEZZA = npcs.getProperty("FrintezzaRandomSpawn", 8);
  22.             WAIT_TIME_FRINTEZZA = npcs.getProperty("FrintezzaWaitTime", 1) * 60000;
  23. +           BYPASS_FRINTEZZA_PARTIES_CHECK = npcs.getProperty("BypassPartiesCheck", true);
  24. +           FRINTEZZA_MIN_PARTIES = npcs.getProperty("FrintezzaMinParties", 4);
  25. +           FRINTEZZA_MAX_PARTIES = npcs.getProperty("FrintezzaMaxParties", 5);
  26. +           DESPAWN_TIME_FRINTEZZA = npcs.getProperty("FrintezzaDespawnTime", 1) * 60000;
  27. +           FRINTEZZA_TIME_CHALLENGE = npcs.getProperty("FrintezzaTimeChallenge", 1) * 60000;
  28.            
  29.             SPAWN_INTERVAL_ORFEN = npcs.getProperty("OrfenSpawnInterval", 48);
  30.             RANDOM_SPAWN_TIME_ORFEN = npcs.getProperty("OrfenRandomSpawn", 20);
  31. Index: java/net/sf/l2j/gameserver/model/zone/type/L2BossZone.java
  32. ===================================================================
  33. --- java/net/sf/l2j/gameserver/model/zone/type/L2BossZone.java  (revision 5)
  34. +++ java/net/sf/l2j/gameserver/model/zone/type/L2BossZone.java  (working copy)
  35. @@ -24,6 +24,7 @@
  36.  import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
  37.  import net.sf.l2j.gameserver.model.actor.L2Attackable;
  38.  import net.sf.l2j.gameserver.model.actor.L2Character;
  39. +import net.sf.l2j.gameserver.model.actor.L2Npc;
  40.  import net.sf.l2j.gameserver.model.actor.L2Playable;
  41.  import net.sf.l2j.gameserver.model.actor.L2Summon;
  42.  import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  43. @@ -287,6 +288,22 @@
  44.         _playerAllowed.clear();
  45.     }
  46.    
  47. +   public void updateKnownList(L2Npc npc)
  48. +   {
  49. +       if (_characterList == null || _characterList.isEmpty())
  50. +       {
  51. +           return;
  52. +       }
  53. +      
  54. +       for (L2Character character : _characterList)
  55. +       {
  56. +           if (character instanceof L2PcInstance)
  57. +           {
  58. +               npc.getStatus().addStatusListener(character);
  59. +           }
  60. +       }
  61. +   }
  62. +  
  63.     @Override
  64.     public void onDieInside(L2Character character)
  65.     {
  66. Index: java/net/sf/l2j/gameserver/scripting/scripts/ai/individual/Frintezza.java
  67. ===================================================================
  68. --- java/net/sf/l2j/gameserver/scripting/scripts/ai/individual/Frintezza.java   (nonexistent)
  69. +++ java/net/sf/l2j/gameserver/scripting/scripts/ai/individual/Frintezza.java   (working copy)
  70. @@ -0,0 +1,2401 @@
  71. +/*
  72. + * This program is free software: you can redistribute it and/or modify it under
  73. + * the terms of the GNU General Public License as published by the Free Software
  74. + * Foundation, either version 3 of the License, or (at your option) any later
  75. + * version.
  76. + *
  77. + * This program is distributed in the hope that it will be useful, but WITHOUT
  78. + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
  79. + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
  80. + * details.
  81. + *
  82. + * You should have received a copy of the GNU General Public License along with
  83. + * this program. If not, see <http://www.gnu.org/licenses/>.
  84. + */
  85. +package net.sf.l2j.gameserver.scripting.scripts.ai.individual;
  86. +
  87. +import java.util.List;
  88. +import java.util.concurrent.CopyOnWriteArrayList;
  89. +
  90. +import net.sf.l2j.Config;
  91. +import net.sf.l2j.commons.random.Rnd;
  92. +import net.sf.l2j.gameserver.ai.CtrlIntention;
  93. +import net.sf.l2j.gameserver.datatables.DoorTable;
  94. +import net.sf.l2j.gameserver.datatables.SkillTable;
  95. +import net.sf.l2j.gameserver.instancemanager.GrandBossManager;
  96. +import net.sf.l2j.gameserver.instancemanager.ZoneManager;
  97. +import net.sf.l2j.gameserver.model.L2CommandChannel;
  98. +import net.sf.l2j.gameserver.model.L2Party;
  99. +import net.sf.l2j.gameserver.model.L2Skill;
  100. +import net.sf.l2j.gameserver.model.actor.L2Attackable;
  101. +import net.sf.l2j.gameserver.model.actor.L2Character;
  102. +import net.sf.l2j.gameserver.model.actor.L2Npc;
  103. +import net.sf.l2j.gameserver.model.actor.instance.L2GrandBossInstance;
  104. +import net.sf.l2j.gameserver.model.actor.instance.L2MonsterInstance;
  105. +import net.sf.l2j.gameserver.model.actor.instance.L2PcInstance;
  106. +import net.sf.l2j.gameserver.model.zone.type.L2BossZone;
  107. +import net.sf.l2j.gameserver.network.SystemMessageId;
  108. +import net.sf.l2j.gameserver.network.clientpackets.Say2;
  109. +import net.sf.l2j.gameserver.network.serverpackets.AbstractNpcInfo.NpcInfo;
  110. +import net.sf.l2j.gameserver.network.serverpackets.CreatureSay;
  111. +import net.sf.l2j.gameserver.network.serverpackets.Earthquake;
  112. +import net.sf.l2j.gameserver.network.serverpackets.ExShowScreenMessage;
  113. +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillCanceld;
  114. +import net.sf.l2j.gameserver.network.serverpackets.MagicSkillUse;
  115. +import net.sf.l2j.gameserver.network.serverpackets.NpcSay;
  116. +import net.sf.l2j.gameserver.network.serverpackets.PlaySound;
  117. +import net.sf.l2j.gameserver.network.serverpackets.SocialAction;
  118. +import net.sf.l2j.gameserver.network.serverpackets.SpecialCamera;
  119. +import net.sf.l2j.gameserver.network.serverpackets.SystemMessage;
  120. +import net.sf.l2j.gameserver.scripting.scripts.ai.AbstractNpcAI;
  121. +import net.sf.l2j.gameserver.skills.AbnormalEffect;
  122. +import net.sf.l2j.gameserver.templates.StatsSet;
  123. +
  124. +/**
  125. + * @Addapted Reborn12, Dandilo, Leonardo Holanda
  126. + */
  127. +public class Frintezza extends AbstractNpcAI
  128. +{
  129. +   // Zone
  130. +   private static final L2BossZone FRINTEZZA_LAIR = ZoneManager.getInstance().getZoneById(110011, L2BossZone.class);
  131. +  
  132. +   // Boss, Npcs and Minios
  133. +   private static final int HALL_ALARM_DEVICE = 18328;
  134. +   private static final int HALL_KEEPER_CAPTAIN = 18329;
  135. +   private static final int HALL_KEEPER_WIZARD = 18330;
  136. +   private static final int HALL_KEEPER_GUARD = 18331;
  137. +   private static final int HALL_KEEPER_PATROL = 18332;
  138. +   private static final int HALL_KEEPER_SUICIDAL_SOLDIER = 18333;
  139. +   private static final int DARK_CHOIR_CAPTAIN = 18334;
  140. +   private static final int DARK_CHOIR_PRIMA_DONNA = 18335;
  141. +   private static final int DARK_CHOIR_LANCER = 18336;
  142. +   private static final int DARK_CHOIR_ARCHER = 18337;
  143. +   private static final int DARK_CHOIR_WITCH_DOCTOR = 18338;
  144. +   private static final int DARK_CHOIR_PLAYER = 18339;
  145. +   private static final int FRINTEZZA = 29045;
  146. +   private static final int SCARLET1 = 29046;
  147. +   private static final int SCARLET2 = 29047;
  148. +   private static final int EVIL_SPIRIT = 29048;
  149. +   private static final int EVIL_SPIRIT2 = 29049;
  150. +   private static final int BREATH_OF_HALISHA = 29050;
  151. +   private static final int BREATH_OF_HALISHA2 = 29051;
  152. +   private static final int FOLLOWER_DUMMY = 29052;
  153. +   private static final int FOLLOWER_DUMMY2 = 29053;
  154. +   private static final int CUBE = 29061;
  155. +   private static final int GUIDE = 32011;
  156. +  
  157. +   // Skills
  158. +   private static final int FRINTEZZA_SONGS = 5008;
  159. +   private static final int BOMBER_GHOST = 5011;
  160. +   private static final int DAEMON_CHARGE = 5015;
  161. +   private static final int YOKE_OF_SCARLET = 5016;
  162. +   private static final int DAEMON_MORPH = 5017;
  163. +   private static final int DAEMON_FIELD = 5018;
  164. +   private static final int DAEMON_DRAIN = 5019;
  165. +  
  166. +   // Item
  167. +   private static final int SCROLL = 8073;
  168. +  
  169. +   // Misc
  170. +   private static final int MIN_LEVEL = 74;
  171. +  
  172. +   // Frintezza Status Tracking :
  173. +   private static final byte DORMANT = 0; // Frintezza is spawned and no one has entered yet. Entry is unlocked
  174. +   private static final byte WAITING = 1; // Frintezza is spawend and someone has entered, triggering a 30 minute window for additional people to enter
  175. +   private static final byte FIGHTING = 2; // Frintezza is engaged in battle, annihilating his foes. Entry is locked
  176. +   private static final byte DEAD = 3; // Frintezza has been killed. Entry is locked
  177. +  
  178. +   // Variables
  179. +   private static long _LastAction = 0;
  180. +   private static int _Angle, _Heading, _LocCycle, _Bomber, _CheckDie, _OnCheck, _OnSong, _Abnormal, _OnMorph = 0;
  181. +   private static int _Scarlet_x, _Scarlet_y, _Scarlet_z, _Scarlet_h = 0;
  182. +   private static int _SecondMorph, _ThirdMorph = 0;
  183. +   private static int _KillHallAlarmDevice, _KillDarkChoirPlayer, _KillDarkChoirCaptain = 0;
  184. +   private L2GrandBossInstance frintezza, weakScarlet, strongScarlet, activeScarlet;
  185. +   private L2MonsterInstance demon1, demon2, demon3, demon4, portrait1, portrait2, portrait3, portrait4;
  186. +   private L2Npc _frintezzaDummy, _overheadDummy, _portraitDummy1, _portraitDummy3, _scarletDummy;
  187. +   private static List<L2PcInstance> _PlayersInside = new CopyOnWriteArrayList<>();
  188. +   private static List<L2Npc> _Room1Mobs = new CopyOnWriteArrayList<>();
  189. +   private static List<L2Npc> _Room2Mobs = new CopyOnWriteArrayList<>();
  190. +   private static List<L2Attackable> Minions = new CopyOnWriteArrayList<>();
  191. +  
  192. +   private static final int[][] INVADE_LOC =
  193. +   {
  194. +       {
  195. +           174102,
  196. +           -76039,
  197. +           -5105
  198. +       },
  199. +       {
  200. +           173235,
  201. +           -76884,
  202. +           -5105
  203. +       },
  204. +       {
  205. +           175003,
  206. +           -76933,
  207. +           -5105
  208. +       },
  209. +       {
  210. +           174196,
  211. +           -76190,
  212. +           -5105
  213. +       },
  214. +       {
  215. +           174013,
  216. +           -76120,
  217. +           -5105
  218. +       },
  219. +       {
  220. +           173263,
  221. +           -75161,
  222. +           -5105
  223. +       }
  224. +   };
  225. +  
  226. +   private static final int[][] SKILLS =
  227. +   {
  228. +       {
  229. +           DAEMON_CHARGE,
  230. +           1,
  231. +           5000
  232. +       },
  233. +       {
  234. +           DAEMON_CHARGE,
  235. +           4,
  236. +           5000
  237. +       },
  238. +       {
  239. +           DAEMON_CHARGE,
  240. +           2,
  241. +           5000
  242. +       },
  243. +       {
  244. +           DAEMON_CHARGE,
  245. +           5,
  246. +           5000
  247. +       },
  248. +       {
  249. +           DAEMON_FIELD,
  250. +           1,
  251. +           10000
  252. +       },
  253. +       {
  254. +           YOKE_OF_SCARLET,
  255. +           1,
  256. +           5000
  257. +       },
  258. +       {
  259. +           DAEMON_CHARGE,
  260. +           3,
  261. +           5000
  262. +       },
  263. +       {
  264. +           DAEMON_CHARGE,
  265. +           6,
  266. +           5000
  267. +       },
  268. +       {
  269. +           DAEMON_FIELD,
  270. +           2,
  271. +           10000
  272. +       },
  273. +       {
  274. +           DAEMON_DRAIN,
  275. +           1,
  276. +           10000
  277. +       },
  278. +       {
  279. +           YOKE_OF_SCARLET,
  280. +           1,
  281. +           5000
  282. +       }
  283. +   };
  284. +  
  285. +   private static final int[][] MOBS_LOC =
  286. +   {
  287. +       {
  288. +           HALL_ALARM_DEVICE,
  289. +           172894,
  290. +           -76019,
  291. +           -5107,
  292. +           243
  293. +       },
  294. +       {
  295. +           HALL_ALARM_DEVICE,
  296. +           174095,
  297. +           -77279,
  298. +           -5107,
  299. +           16216
  300. +       },
  301. +       {
  302. +           HALL_ALARM_DEVICE,
  303. +           174111,
  304. +           -74833,
  305. +           -5107,
  306. +           49043
  307. +       },
  308. +       {
  309. +           HALL_ALARM_DEVICE,
  310. +           175344,
  311. +           -76042,
  312. +           -5107,
  313. +           32847
  314. +       },
  315. +       {
  316. +           HALL_KEEPER_WIZARD,
  317. +           173489,
  318. +           -76227,
  319. +           -5134,
  320. +           63565
  321. +       },
  322. +       {
  323. +           HALL_KEEPER_WIZARD,
  324. +           173498,
  325. +           -75724,
  326. +           -5107,
  327. +           58498
  328. +       },
  329. +       {
  330. +           HALL_KEEPER_WIZARD,
  331. +           174365,
  332. +           -76745,
  333. +           -5107,
  334. +           22424
  335. +       },
  336. +       {
  337. +           HALL_KEEPER_WIZARD,
  338. +           174570,
  339. +           -75584,
  340. +           -5107,
  341. +           31968
  342. +       },
  343. +       {
  344. +           HALL_KEEPER_WIZARD,
  345. +           174613,
  346. +           -76179,
  347. +           -5107,
  348. +           31471
  349. +       },
  350. +       {
  351. +           HALL_KEEPER_PATROL,
  352. +           173620,
  353. +           -75981,
  354. +           -5107,
  355. +           4588
  356. +       },
  357. +       {
  358. +           HALL_KEEPER_PATROL,
  359. +           173630,
  360. +           -76340,
  361. +           -5107,
  362. +           62454
  363. +       },
  364. +       {
  365. +           HALL_KEEPER_PATROL,
  366. +           173755,
  367. +           -75613,
  368. +           -5107,
  369. +           57892
  370. +       },
  371. +       {
  372. +           HALL_KEEPER_PATROL,
  373. +           173823,
  374. +           -76688,
  375. +           -5107,
  376. +           2411
  377. +       },
  378. +       {
  379. +           HALL_KEEPER_PATROL,
  380. +           174000,
  381. +           -75411,
  382. +           -5107,
  383. +           54718
  384. +       },
  385. +       {
  386. +           HALL_KEEPER_PATROL,
  387. +           174487,
  388. +           -75555,
  389. +           -5107,
  390. +           33861
  391. +       },
  392. +       {
  393. +           HALL_KEEPER_PATROL,
  394. +           174517,
  395. +           -76471,
  396. +           -5107,
  397. +           21893
  398. +       },
  399. +       {
  400. +           HALL_KEEPER_PATROL,
  401. +           174576,
  402. +           -76122,
  403. +           -5107,
  404. +           31176
  405. +       },
  406. +       {
  407. +           HALL_KEEPER_PATROL,
  408. +           174600,
  409. +           -75841,
  410. +           -5134,
  411. +           35927
  412. +       },
  413. +       {
  414. +           HALL_KEEPER_CAPTAIN,
  415. +           173481,
  416. +           -76043,
  417. +           -5107,
  418. +           61312
  419. +       },
  420. +       {
  421. +           HALL_KEEPER_CAPTAIN,
  422. +           173539,
  423. +           -75678,
  424. +           -5107,
  425. +           59524
  426. +       },
  427. +       {
  428. +           HALL_KEEPER_CAPTAIN,
  429. +           173584,
  430. +           -76386,
  431. +           -5107,
  432. +           3041
  433. +       },
  434. +       {
  435. +           HALL_KEEPER_CAPTAIN,
  436. +           173773,
  437. +           -75420,
  438. +           -5107,
  439. +           51115
  440. +       },
  441. +       {
  442. +           HALL_KEEPER_CAPTAIN,
  443. +           173777,
  444. +           -76650,
  445. +           -5107,
  446. +           12588
  447. +       },
  448. +       {
  449. +           HALL_KEEPER_CAPTAIN,
  450. +           174585,
  451. +           -76510,
  452. +           -5107,
  453. +           21704
  454. +       },
  455. +       {
  456. +           HALL_KEEPER_CAPTAIN,
  457. +           174623,
  458. +           -75571,
  459. +           -5107,
  460. +           40141
  461. +       },
  462. +       {
  463. +           HALL_KEEPER_CAPTAIN,
  464. +           174744,
  465. +           -76240,
  466. +           -5107,
  467. +           29202
  468. +       },
  469. +       {
  470. +           HALL_KEEPER_CAPTAIN,
  471. +           174769,
  472. +           -75895,
  473. +           -5107,
  474. +           29572
  475. +       },
  476. +       {
  477. +           HALL_KEEPER_SUICIDAL_SOLDIER,
  478. +           173861,
  479. +           -76011,
  480. +           -5107,
  481. +           383
  482. +       },
  483. +       {
  484. +           HALL_KEEPER_SUICIDAL_SOLDIER,
  485. +           173872,
  486. +           -76461,
  487. +           -5107,
  488. +           8041
  489. +       },
  490. +       {
  491. +           HALL_KEEPER_SUICIDAL_SOLDIER,
  492. +           173898,
  493. +           -75668,
  494. +           -5107,
  495. +           51856
  496. +       },
  497. +       {
  498. +           HALL_KEEPER_SUICIDAL_SOLDIER,
  499. +           174422,
  500. +           -75689,
  501. +           -5107,
  502. +           42878
  503. +       },
  504. +       {
  505. +           HALL_KEEPER_SUICIDAL_SOLDIER,
  506. +           174460,
  507. +           -76355,
  508. +           -5107,
  509. +           27311
  510. +       },
  511. +       {
  512. +           HALL_KEEPER_SUICIDAL_SOLDIER,
  513. +           174483,
  514. +           -76041,
  515. +           -5107,
  516. +           30947
  517. +       },
  518. +       {
  519. +           HALL_KEEPER_GUARD,
  520. +           173515,
  521. +           -76184,
  522. +           -5107,
  523. +           6971
  524. +       },
  525. +       {
  526. +           HALL_KEEPER_GUARD,
  527. +           173516,
  528. +           -75790,
  529. +           -5134,
  530. +           3142
  531. +       },
  532. +       {
  533. +           HALL_KEEPER_GUARD,
  534. +           173696,
  535. +           -76675,
  536. +           -5107,
  537. +           6757
  538. +       },
  539. +       {
  540. +           HALL_KEEPER_GUARD,
  541. +           173766,
  542. +           -75502,
  543. +           -5134,
  544. +           60827
  545. +       },
  546. +       {
  547. +           HALL_KEEPER_GUARD,
  548. +           174473,
  549. +           -75321,
  550. +           -5107,
  551. +           37147
  552. +       },
  553. +       {
  554. +           HALL_KEEPER_GUARD,
  555. +           174493,
  556. +           -76505,
  557. +           -5107,
  558. +           34503
  559. +       },
  560. +       {
  561. +           HALL_KEEPER_GUARD,
  562. +           174568,
  563. +           -75654,
  564. +           -5134,
  565. +           41661
  566. +       },
  567. +       {
  568. +           HALL_KEEPER_GUARD,
  569. +           174584,
  570. +           -76263,
  571. +           -5107,
  572. +           31729
  573. +       },
  574. +       {
  575. +           DARK_CHOIR_PLAYER,
  576. +           173892,
  577. +           -81592,
  578. +           -5123,
  579. +           50849
  580. +       },
  581. +       {
  582. +           DARK_CHOIR_PLAYER,
  583. +           173958,
  584. +           -81820,
  585. +           -5123,
  586. +           7459
  587. +       },
  588. +       {
  589. +           DARK_CHOIR_PLAYER,
  590. +           174128,
  591. +           -81805,
  592. +           -5150,
  593. +           21495
  594. +       },
  595. +       {
  596. +           DARK_CHOIR_PLAYER,
  597. +           174245,
  598. +           -81566,
  599. +           -5123,
  600. +           41760
  601. +       },
  602. +       {
  603. +           DARK_CHOIR_CAPTAIN,
  604. +           173264,
  605. +           -81529,
  606. +           -5072,
  607. +           1646
  608. +       },
  609. +       {
  610. +           DARK_CHOIR_CAPTAIN,
  611. +           173265,
  612. +           -81656,
  613. +           -5072,
  614. +           441
  615. +       },
  616. +       {
  617. +           DARK_CHOIR_CAPTAIN,
  618. +           173267,
  619. +           -81889,
  620. +           -5072,
  621. +           0
  622. +       },
  623. +       {
  624. +           DARK_CHOIR_CAPTAIN,
  625. +           173271,
  626. +           -82015,
  627. +           -5072,
  628. +           65382
  629. +       },
  630. +       {
  631. +           DARK_CHOIR_CAPTAIN,
  632. +           174867,
  633. +           -81655,
  634. +           -5073,
  635. +           32537
  636. +       },
  637. +       {
  638. +           DARK_CHOIR_CAPTAIN,
  639. +           174868,
  640. +           -81890,
  641. +           -5073,
  642. +           32768
  643. +       },
  644. +       {
  645. +           DARK_CHOIR_CAPTAIN,
  646. +           174869,
  647. +           -81485,
  648. +           -5073,
  649. +           32315
  650. +       },
  651. +       {
  652. +           DARK_CHOIR_CAPTAIN,
  653. +           174871,
  654. +           -82017,
  655. +           -5073,
  656. +           33007
  657. +       },
  658. +       {
  659. +           DARK_CHOIR_PRIMA_DONNA,
  660. +           173074,
  661. +           -80817,
  662. +           -5107,
  663. +           8353
  664. +       },
  665. +       {
  666. +           DARK_CHOIR_PRIMA_DONNA,
  667. +           173128,
  668. +           -82702,
  669. +           -5107,
  670. +           5345
  671. +       },
  672. +       {
  673. +           DARK_CHOIR_PRIMA_DONNA,
  674. +           173181,
  675. +           -82544,
  676. +           -5107,
  677. +           65135
  678. +       },
  679. +       {
  680. +           DARK_CHOIR_PRIMA_DONNA,
  681. +           173191,
  682. +           -80981,
  683. +           -5107,
  684. +           6947
  685. +       },
  686. +       {
  687. +           DARK_CHOIR_PRIMA_DONNA,
  688. +           174859,
  689. +           -80889,
  690. +           -5134,
  691. +           24103
  692. +       },
  693. +       {
  694. +           DARK_CHOIR_PRIMA_DONNA,
  695. +           174924,
  696. +           -82666,
  697. +           -5107,
  698. +           38710
  699. +       },
  700. +       {
  701. +           DARK_CHOIR_PRIMA_DONNA,
  702. +           174947,
  703. +           -80733,
  704. +           -5107,
  705. +           22449
  706. +       },
  707. +       {
  708. +           DARK_CHOIR_PRIMA_DONNA,
  709. +           175096,
  710. +           -82724,
  711. +           -5107,
  712. +           42205
  713. +       },
  714. +       {
  715. +           DARK_CHOIR_LANCER,
  716. +           173435,
  717. +           -80512,
  718. +           -5107,
  719. +           65215
  720. +       },
  721. +       {
  722. +           DARK_CHOIR_LANCER,
  723. +           173440,
  724. +           -82948,
  725. +           -5107,
  726. +           417
  727. +       },
  728. +       {
  729. +           DARK_CHOIR_LANCER,
  730. +           173443,
  731. +           -83120,
  732. +           -5107,
  733. +           1094
  734. +       },
  735. +       {
  736. +           DARK_CHOIR_LANCER,
  737. +           173463,
  738. +           -83064,
  739. +           -5107,
  740. +           286
  741. +       },
  742. +       {
  743. +           DARK_CHOIR_LANCER,
  744. +           173465,
  745. +           -80453,
  746. +           -5107,
  747. +           174
  748. +       },
  749. +       {
  750. +           DARK_CHOIR_LANCER,
  751. +           173465,
  752. +           -83006,
  753. +           -5107,
  754. +           2604
  755. +       },
  756. +       {
  757. +           DARK_CHOIR_LANCER,
  758. +           173468,
  759. +           -82889,
  760. +           -5107,
  761. +           316
  762. +       },
  763. +       {
  764. +           DARK_CHOIR_LANCER,
  765. +           173469,
  766. +           -80570,
  767. +           -5107,
  768. +           65353
  769. +       },
  770. +       {
  771. +           DARK_CHOIR_LANCER,
  772. +           173469,
  773. +           -80628,
  774. +           -5107,
  775. +           166
  776. +       },
  777. +       {
  778. +           DARK_CHOIR_LANCER,
  779. +           173492,
  780. +           -83121,
  781. +           -5107,
  782. +           394
  783. +       },
  784. +       {
  785. +           DARK_CHOIR_LANCER,
  786. +           173493,
  787. +           -80683,
  788. +           -5107,
  789. +           0
  790. +       },
  791. +       {
  792. +           DARK_CHOIR_LANCER,
  793. +           173497,
  794. +           -80510,
  795. +           -5134,
  796. +           417
  797. +       },
  798. +       {
  799. +           DARK_CHOIR_LANCER,
  800. +           173499,
  801. +           -82947,
  802. +           -5107,
  803. +           0
  804. +       },
  805. +       {
  806. +           DARK_CHOIR_LANCER,
  807. +           173521,
  808. +           -83063,
  809. +           -5107,
  810. +           316
  811. +       },
  812. +       {
  813. +           DARK_CHOIR_LANCER,
  814. +           173523,
  815. +           -82889,
  816. +           -5107,
  817. +           128
  818. +       },
  819. +       {
  820. +           DARK_CHOIR_LANCER,
  821. +           173524,
  822. +           -80627,
  823. +           -5134,
  824. +           65027
  825. +       },
  826. +       {
  827. +           DARK_CHOIR_LANCER,
  828. +           173524,
  829. +           -83007,
  830. +           -5107,
  831. +           0
  832. +       },
  833. +       {
  834. +           DARK_CHOIR_LANCER,
  835. +           173526,
  836. +           -80452,
  837. +           -5107,
  838. +           64735
  839. +       },
  840. +       {
  841. +           DARK_CHOIR_LANCER,
  842. +           173527,
  843. +           -80569,
  844. +           -5134,
  845. +           65062
  846. +       },
  847. +       {
  848. +           DARK_CHOIR_LANCER,
  849. +           174602,
  850. +           -83122,
  851. +           -5107,
  852. +           33104
  853. +       },
  854. +       {
  855. +           DARK_CHOIR_LANCER,
  856. +           174604,
  857. +           -82949,
  858. +           -5107,
  859. +           33184
  860. +       },
  861. +       {
  862. +           DARK_CHOIR_LANCER,
  863. +           174609,
  864. +           -80514,
  865. +           -5107,
  866. +           33234
  867. +       },
  868. +       {
  869. +           DARK_CHOIR_LANCER,
  870. +           174609,
  871. +           -80684,
  872. +           -5107,
  873. +           32851
  874. +       },
  875. +       {
  876. +           DARK_CHOIR_LANCER,
  877. +           174629,
  878. +           -80627,
  879. +           -5107,
  880. +           33346
  881. +       },
  882. +       {
  883. +           DARK_CHOIR_LANCER,
  884. +           174632,
  885. +           -80570,
  886. +           -5107,
  887. +           32896
  888. +       },
  889. +       {
  890. +           DARK_CHOIR_LANCER,
  891. +           174632,
  892. +           -83066,
  893. +           -5107,
  894. +           32768
  895. +       },
  896. +       {
  897. +           DARK_CHOIR_LANCER,
  898. +           174635,
  899. +           -82893,
  900. +           -5107,
  901. +           33594
  902. +       },
  903. +       {
  904. +           DARK_CHOIR_LANCER,
  905. +           174636,
  906. +           -80456,
  907. +           -5107,
  908. +           32065
  909. +       },
  910. +       {
  911. +           DARK_CHOIR_LANCER,
  912. +           174639,
  913. +           -83008,
  914. +           -5107,
  915. +           33057
  916. +       },
  917. +       {
  918. +           DARK_CHOIR_LANCER,
  919. +           174660,
  920. +           -80512,
  921. +           -5107,
  922. +           33057
  923. +       },
  924. +       {
  925. +           DARK_CHOIR_LANCER,
  926. +           174661,
  927. +           -83121,
  928. +           -5107,
  929. +           32768
  930. +       },
  931. +       {
  932. +           DARK_CHOIR_LANCER,
  933. +           174663,
  934. +           -82948,
  935. +           -5107,
  936. +           32768
  937. +       },
  938. +       {
  939. +           DARK_CHOIR_LANCER,
  940. +           174664,
  941. +           -80685,
  942. +           -5107,
  943. +           32676
  944. +       },
  945. +       {
  946. +           DARK_CHOIR_LANCER,
  947. +           174687,
  948. +           -83008,
  949. +           -5107,
  950. +           32520
  951. +       },
  952. +       {
  953. +           DARK_CHOIR_LANCER,
  954. +           174691,
  955. +           -83066,
  956. +           -5107,
  957. +           32961
  958. +       },
  959. +       {
  960. +           DARK_CHOIR_LANCER,
  961. +           174692,
  962. +           -80455,
  963. +           -5107,
  964. +           33202
  965. +       },
  966. +       {
  967. +           DARK_CHOIR_LANCER,
  968. +           174692,
  969. +           -80571,
  970. +           -5107,
  971. +           32768
  972. +       },
  973. +       {
  974. +           DARK_CHOIR_LANCER,
  975. +           174693,
  976. +           -80630,
  977. +           -5107,
  978. +           32994
  979. +       },
  980. +       {
  981. +           DARK_CHOIR_LANCER,
  982. +           174693,
  983. +           -82889,
  984. +           -5107,
  985. +           32622
  986. +       },
  987. +       {
  988. +           DARK_CHOIR_ARCHER,
  989. +           172837,
  990. +           -82382,
  991. +           -5107,
  992. +           58363
  993. +       },
  994. +       {
  995. +           DARK_CHOIR_ARCHER,
  996. +           172867,
  997. +           -81123,
  998. +           -5107,
  999. +           64055
  1000. +       },
  1001. +       {
  1002. +           DARK_CHOIR_ARCHER,
  1003. +           172883,
  1004. +           -82495,
  1005. +           -5107,
  1006. +           64764
  1007. +       },
  1008. +       {
  1009. +           DARK_CHOIR_ARCHER,
  1010. +           172916,
  1011. +           -81033,
  1012. +           -5107,
  1013. +           7099
  1014. +       },
  1015. +       {
  1016. +           DARK_CHOIR_ARCHER,
  1017. +           172940,
  1018. +           -82325,
  1019. +           -5107,
  1020. +           58998
  1021. +       },
  1022. +       {
  1023. +           DARK_CHOIR_ARCHER,
  1024. +           172946,
  1025. +           -82435,
  1026. +           -5107,
  1027. +           58038
  1028. +       },
  1029. +       {
  1030. +           DARK_CHOIR_ARCHER,
  1031. +           172971,
  1032. +           -81198,
  1033. +           -5107,
  1034. +           14768
  1035. +       },
  1036. +       {
  1037. +           DARK_CHOIR_ARCHER,
  1038. +           172992,
  1039. +           -81091,
  1040. +           -5107,
  1041. +           9438
  1042. +       },
  1043. +       {
  1044. +           DARK_CHOIR_ARCHER,
  1045. +           173032,
  1046. +           -82365,
  1047. +           -5107,
  1048. +           59041
  1049. +       },
  1050. +       {
  1051. +           DARK_CHOIR_ARCHER,
  1052. +           173064,
  1053. +           -81125,
  1054. +           -5107,
  1055. +           5827
  1056. +       },
  1057. +       {
  1058. +           DARK_CHOIR_ARCHER,
  1059. +           175014,
  1060. +           -81173,
  1061. +           -5107,
  1062. +           26398
  1063. +       },
  1064. +       {
  1065. +           DARK_CHOIR_ARCHER,
  1066. +           175061,
  1067. +           -82374,
  1068. +           -5107,
  1069. +           43290
  1070. +       },
  1071. +       {
  1072. +           DARK_CHOIR_ARCHER,
  1073. +           175096,
  1074. +           -81080,
  1075. +           -5107,
  1076. +           24719
  1077. +       },
  1078. +       {
  1079. +           DARK_CHOIR_ARCHER,
  1080. +           175169,
  1081. +           -82453,
  1082. +           -5107,
  1083. +           37672
  1084. +       },
  1085. +       {
  1086. +           DARK_CHOIR_ARCHER,
  1087. +           175172,
  1088. +           -80972,
  1089. +           -5107,
  1090. +           32315
  1091. +       },
  1092. +       {
  1093. +           DARK_CHOIR_ARCHER,
  1094. +           175174,
  1095. +           -82328,
  1096. +           -5107,
  1097. +           41760
  1098. +       },
  1099. +       {
  1100. +           DARK_CHOIR_ARCHER,
  1101. +           175197,
  1102. +           -81157,
  1103. +           -5107,
  1104. +           27617
  1105. +       },
  1106. +       {
  1107. +           DARK_CHOIR_ARCHER,
  1108. +           175245,
  1109. +           -82547,
  1110. +           -5107,
  1111. +           40275
  1112. +       },
  1113. +       {
  1114. +           DARK_CHOIR_ARCHER,
  1115. +           175249,
  1116. +           -81075,
  1117. +           -5107,
  1118. +           28435
  1119. +       },
  1120. +       {
  1121. +           DARK_CHOIR_ARCHER,
  1122. +           175292,
  1123. +           -82432,
  1124. +           -5107,
  1125. +           42225
  1126. +       },
  1127. +       {
  1128. +           DARK_CHOIR_WITCH_DOCTOR,
  1129. +           173014,
  1130. +           -82628,
  1131. +           -5107,
  1132. +           11874
  1133. +       },
  1134. +       {
  1135. +           DARK_CHOIR_WITCH_DOCTOR,
  1136. +           173033,
  1137. +           -80920,
  1138. +           -5107,
  1139. +           10425
  1140. +       },
  1141. +       {
  1142. +           DARK_CHOIR_WITCH_DOCTOR,
  1143. +           173095,
  1144. +           -82520,
  1145. +           -5107,
  1146. +           49152
  1147. +       },
  1148. +       {
  1149. +           DARK_CHOIR_WITCH_DOCTOR,
  1150. +           173115,
  1151. +           -80986,
  1152. +           -5107,
  1153. +           9611
  1154. +       },
  1155. +       {
  1156. +           DARK_CHOIR_WITCH_DOCTOR,
  1157. +           173144,
  1158. +           -80894,
  1159. +           -5107,
  1160. +           5345
  1161. +       },
  1162. +       {
  1163. +           DARK_CHOIR_WITCH_DOCTOR,
  1164. +           173147,
  1165. +           -82602,
  1166. +           -5107,
  1167. +           51316
  1168. +       },
  1169. +       {
  1170. +           DARK_CHOIR_WITCH_DOCTOR,
  1171. +           174912,
  1172. +           -80825,
  1173. +           -5107,
  1174. +           24270
  1175. +       },
  1176. +       {
  1177. +           DARK_CHOIR_WITCH_DOCTOR,
  1178. +           174935,
  1179. +           -80899,
  1180. +           -5107,
  1181. +           18061
  1182. +       },
  1183. +       {
  1184. +           DARK_CHOIR_WITCH_DOCTOR,
  1185. +           175016,
  1186. +           -82697,
  1187. +           -5107,
  1188. +           39533
  1189. +       },
  1190. +       {
  1191. +           DARK_CHOIR_WITCH_DOCTOR,
  1192. +           175041,
  1193. +           -80834,
  1194. +           -5107,
  1195. +           25420
  1196. +       },
  1197. +       {
  1198. +           DARK_CHOIR_WITCH_DOCTOR,
  1199. +           175071,
  1200. +           -82549,
  1201. +           -5107,
  1202. +           39163
  1203. +       },
  1204. +       {
  1205. +           DARK_CHOIR_WITCH_DOCTOR,
  1206. +           175154,
  1207. +           -82619,
  1208. +           -5107,
  1209. +           36345
  1210. +       }
  1211. +   };
  1212. +  
  1213. +   // Boss: Frintezza
  1214. +   public Frintezza()
  1215. +   {
  1216. +       super("ai/individual");
  1217. +       addStartNpc(GUIDE, CUBE);
  1218. +       addTalkId(GUIDE, CUBE);
  1219. +       addAttackId(SCARLET1, SCARLET2, FRINTEZZA, HALL_ALARM_DEVICE, HALL_KEEPER_CAPTAIN, HALL_KEEPER_WIZARD, HALL_KEEPER_GUARD, HALL_KEEPER_PATROL, HALL_KEEPER_SUICIDAL_SOLDIER, DARK_CHOIR_CAPTAIN, DARK_CHOIR_PRIMA_DONNA, DARK_CHOIR_LANCER, DARK_CHOIR_ARCHER, DARK_CHOIR_WITCH_DOCTOR, DARK_CHOIR_PLAYER, EVIL_SPIRIT, EVIL_SPIRIT2, BREATH_OF_HALISHA, BREATH_OF_HALISHA2);
  1220. +       addKillId(SCARLET1, SCARLET2, FRINTEZZA, HALL_ALARM_DEVICE, HALL_KEEPER_CAPTAIN, HALL_KEEPER_WIZARD, HALL_KEEPER_GUARD, HALL_KEEPER_PATROL, HALL_KEEPER_SUICIDAL_SOLDIER, DARK_CHOIR_CAPTAIN, DARK_CHOIR_PRIMA_DONNA, DARK_CHOIR_LANCER, DARK_CHOIR_ARCHER, DARK_CHOIR_WITCH_DOCTOR, DARK_CHOIR_PLAYER, EVIL_SPIRIT, EVIL_SPIRIT2, BREATH_OF_HALISHA, BREATH_OF_HALISHA2);
  1221. +      
  1222. +       StatsSet info = GrandBossManager.getInstance().getStatsSet(FRINTEZZA);
  1223. +       int status = GrandBossManager.getInstance().getBossStatus(FRINTEZZA);
  1224. +       if (status == DEAD)
  1225. +       {
  1226. +           long temp = (info.getLong("respawn_time") - System.currentTimeMillis());
  1227. +           if (temp > 0)
  1228. +               startQuestTimer("frintezza_unlock", temp, null, null, false);
  1229. +           else
  1230. +               GrandBossManager.getInstance().setBossStatus(FRINTEZZA, DORMANT);
  1231. +       }
  1232. +       else if (status != DORMANT)
  1233. +           GrandBossManager.getInstance().setBossStatus(FRINTEZZA, DORMANT);
  1234. +      
  1235. +       // tempfix for messed door cords
  1236. +       for (int i = 0; i < 8; i++)
  1237. +           DoorTable.getInstance().getDoor(25150051 + i);
  1238. +   }
  1239. +  
  1240. +   @Override
  1241. +   public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
  1242. +   {
  1243. +       long temp = 0;
  1244. +      
  1245. +       switch (event)
  1246. +       {
  1247. +           case "waiting":
  1248. +               startQuestTimer("close", 27000, npc, null, false);
  1249. +               startQuestTimer("camera_1", 30000, npc, null, false);
  1250. +               FRINTEZZA_LAIR.broadcastPacket(new Earthquake(174232, -88020, -5116, 45, 27));
  1251. +               break;
  1252. +          
  1253. +           case "room1_spawn":
  1254. +               CreatureSay cs = new CreatureSay(0, Say2.SHOUT, "Hall Alarm Device", "Intruders! Sound the alarm!");
  1255. +               FRINTEZZA_LAIR.broadcastPacket(cs);
  1256. +               for (int i = 0; i <= 17; i++)
  1257. +               {
  1258. +                   L2Npc mob = addSpawn(MOBS_LOC[i][0], MOBS_LOC[i][1], MOBS_LOC[i][2], MOBS_LOC[i][3], MOBS_LOC[i][4], false, 0, false);
  1259. +                   _Room1Mobs.add(mob);
  1260. +               }
  1261. +               break;
  1262. +          
  1263. +           case "room1_spawn2":
  1264. +               for (int i = 18; i <= 26; i++)
  1265. +               {
  1266. +                   L2Npc mob = addSpawn(MOBS_LOC[i][0], MOBS_LOC[i][1], MOBS_LOC[i][2], MOBS_LOC[i][3], MOBS_LOC[i][4], false, 0, false);
  1267. +                   _Room1Mobs.add(mob);
  1268. +               }
  1269. +               break;
  1270. +          
  1271. +           case "room1_spawn3":
  1272. +               for (int i = 27; i <= 32; i++)
  1273. +               {
  1274. +                   L2Npc mob = addSpawn(MOBS_LOC[i][0], MOBS_LOC[i][1], MOBS_LOC[i][2], MOBS_LOC[i][3], MOBS_LOC[i][4], false, 0, false);
  1275. +                   _Room1Mobs.add(mob);
  1276. +               }
  1277. +               break;
  1278. +          
  1279. +           case "room1_spawn4":
  1280. +               for (int i = 33; i <= 40; i++)
  1281. +               {
  1282. +                   L2Npc mob = addSpawn(MOBS_LOC[i][0], MOBS_LOC[i][1], MOBS_LOC[i][2], MOBS_LOC[i][3], MOBS_LOC[i][4], false, 0, false);
  1283. +                   _Room1Mobs.add(mob);
  1284. +               }
  1285. +               break;
  1286. +          
  1287. +           case "room2_spawn":
  1288. +               for (int i = 41; i <= 44; i++)
  1289. +               {
  1290. +                   L2Npc mob = addSpawn(MOBS_LOC[i][0], MOBS_LOC[i][1], MOBS_LOC[i][2], MOBS_LOC[i][3], MOBS_LOC[i][4], false, 0, false);
  1291. +                   _Room2Mobs.add(mob);
  1292. +               }
  1293. +               break;
  1294. +          
  1295. +           case "room2_spawn2":
  1296. +               for (int i = 45; i <= 131; i++)
  1297. +               {
  1298. +                   L2Npc mob = addSpawn(MOBS_LOC[i][0], MOBS_LOC[i][1], MOBS_LOC[i][2], MOBS_LOC[i][3], MOBS_LOC[i][4], false, 0, false);
  1299. +                   _Room2Mobs.add(mob);
  1300. +               }
  1301. +               break;
  1302. +          
  1303. +           case "room1_del":
  1304. +               for (L2Npc mob : _Room1Mobs)
  1305. +               {
  1306. +                   if (mob != null)
  1307. +                       mob.deleteMe();
  1308. +               }
  1309. +               _Room1Mobs.clear();
  1310. +               break;
  1311. +          
  1312. +           case "room2_del":
  1313. +               for (L2Npc mob : _Room2Mobs)
  1314. +               {
  1315. +                   if (mob != null)
  1316. +                       mob.deleteMe();
  1317. +               }
  1318. +               _Room2Mobs.clear();
  1319. +               break;
  1320. +          
  1321. +           case "room3_del":
  1322. +               if (demon1 != null)
  1323. +                   demon1.deleteMe();
  1324. +               if (demon2 != null)
  1325. +                   demon2.deleteMe();
  1326. +               if (demon3 != null)
  1327. +                   demon3.deleteMe();
  1328. +               if (demon4 != null)
  1329. +                   demon4.deleteMe();
  1330. +               if (portrait1 != null)
  1331. +                   portrait1.deleteMe();
  1332. +               if (portrait2 != null)
  1333. +                   portrait2.deleteMe();
  1334. +               if (portrait3 != null)
  1335. +                   portrait3.deleteMe();
  1336. +               if (portrait4 != null)
  1337. +                   portrait4.deleteMe();
  1338. +               if (frintezza != null)
  1339. +                   frintezza.deleteMe();
  1340. +               if (weakScarlet != null)
  1341. +                   weakScarlet.deleteMe();
  1342. +               if (strongScarlet != null)
  1343. +                   strongScarlet.deleteMe();
  1344. +              
  1345. +               demon1 = null;
  1346. +               demon2 = null;
  1347. +               demon3 = null;
  1348. +               demon4 = null;
  1349. +               portrait1 = null;
  1350. +               portrait2 = null;
  1351. +               portrait3 = null;
  1352. +               portrait4 = null;
  1353. +               frintezza = null;
  1354. +               weakScarlet = null;
  1355. +               strongScarlet = null;
  1356. +               activeScarlet = null;
  1357. +               break;
  1358. +          
  1359. +           case "clean":
  1360. +               _LastAction = 0;
  1361. +               _LocCycle = 0;
  1362. +               _CheckDie = 0;
  1363. +               _OnCheck = 0;
  1364. +               _Abnormal = 0;
  1365. +               _OnMorph = 0;
  1366. +               _SecondMorph = 0;
  1367. +               _ThirdMorph = 0;
  1368. +               _KillHallAlarmDevice = 0;
  1369. +               _KillDarkChoirPlayer = 0;
  1370. +               _KillDarkChoirCaptain = 0;
  1371. +               _PlayersInside.clear();
  1372. +               break;
  1373. +          
  1374. +           case "close":
  1375. +               for (int i = 25150051; i <= 25150058; i++)
  1376. +                   DoorTable.getInstance().getDoor(i).closeMe();
  1377. +               for (int i = 25150061; i <= 25150070; i++)
  1378. +                   DoorTable.getInstance().getDoor(i).closeMe();
  1379. +              
  1380. +               DoorTable.getInstance().getDoor(25150042).closeMe();
  1381. +               DoorTable.getInstance().getDoor(25150043).closeMe();
  1382. +               DoorTable.getInstance().getDoor(25150045).closeMe();
  1383. +               DoorTable.getInstance().getDoor(25150046).closeMe();
  1384. +               break;
  1385. +          
  1386. +           case "loc_check":
  1387. +               switch (GrandBossManager.getInstance().getBossStatus(FRINTEZZA))
  1388. +               {
  1389. +                   case FIGHTING:
  1390. +                       if (!FRINTEZZA_LAIR.isInsideZone(npc))
  1391. +                           npc.teleToLocation(174232, -88020, -5116, 0);
  1392. +                       if (npc.getX() < 171932 || npc.getX() > 176532 || npc.getY() < -90320 || npc.getY() > -85720 || npc.getZ() < -5130)
  1393. +                           npc.teleToLocation(174232, -88020, -5116, 0);
  1394. +                       break;
  1395. +               }
  1396. +               break;
  1397. +          
  1398. +           case "camera_1":
  1399. +               GrandBossManager.getInstance().setBossStatus(FRINTEZZA, FIGHTING);
  1400. +               _frintezzaDummy = addSpawn(FOLLOWER_DUMMY, 174240, -89805, -5022, 16048, false, 0, false);
  1401. +               _frintezzaDummy.setIsInvul(true);
  1402. +               _frintezzaDummy.setIsImmobilized(true);
  1403. +               _overheadDummy = addSpawn(FOLLOWER_DUMMY, 174232, -88020, -5110, 16384, false, 0, false);
  1404. +               _overheadDummy.setIsInvul(true);
  1405. +               _overheadDummy.setIsImmobilized(true);
  1406. +               _overheadDummy.setCollisionHeight(600);
  1407. +               FRINTEZZA_LAIR.broadcastPacket(new NpcInfo(_overheadDummy, null));
  1408. +               _portraitDummy1 = addSpawn(FOLLOWER_DUMMY, 172450, -87890, -5100, 16048, false, 0, false);
  1409. +               _portraitDummy1.setIsImmobilized(true);
  1410. +               _portraitDummy1.setIsInvul(true);
  1411. +               _portraitDummy3 = addSpawn(FOLLOWER_DUMMY, 176012, -87890, -5100, 16048, false, 0, false);
  1412. +               _portraitDummy3.setIsImmobilized(true);
  1413. +               _portraitDummy3.setIsInvul(true);
  1414. +               _scarletDummy = addSpawn(FOLLOWER_DUMMY2, 174232, -88020, -5110, 16384, false, 0, false);
  1415. +               _scarletDummy.setIsInvul(true);
  1416. +               _scarletDummy.setIsImmobilized(true);
  1417. +               startQuestTimer("stop_pc", 0, npc, null, false);
  1418. +               startQuestTimer("camera_2", 1000, _overheadDummy, null, false);
  1419. +               break;
  1420. +          
  1421. +           case "camera_2":
  1422. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_overheadDummy.getObjectId(), 0, 75, -89, 0, 100, 0, 0, 1, 0));
  1423. +               startQuestTimer("camera_2b", 0, _overheadDummy, null, false);
  1424. +               break;
  1425. +          
  1426. +           case "camera_2b":
  1427. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_overheadDummy.getObjectId(), 0, 75, -89, 0, 100, 0, 0, 1, 0));
  1428. +               startQuestTimer("camera_3", 0, _overheadDummy, null, false);
  1429. +               break;
  1430. +          
  1431. +           case "camera_3":
  1432. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_overheadDummy.getObjectId(), 300, 90, -10, 6500, 7000, 0, 0, 1, 0));
  1433. +               frintezza = (L2GrandBossInstance) addSpawn(FRINTEZZA, 174240, -89805, -5022, 16048, false, 0, false);
  1434. +               GrandBossManager.getInstance().addBoss(frintezza);
  1435. +               frintezza.setIsImmobilized(true);
  1436. +               frintezza.setIsInvul(true);
  1437. +               frintezza.disableAllSkills();
  1438. +               FRINTEZZA_LAIR.updateKnownList(frintezza);
  1439. +               demon2 = (L2MonsterInstance) addSpawn(29051, 175876, -88713, -5100, 28205, false, 0, false);
  1440. +               demon2.setIsImmobilized(true);
  1441. +               demon2.disableAllSkills();
  1442. +               FRINTEZZA_LAIR.updateKnownList(demon2);
  1443. +               demon3 = (L2MonsterInstance) addSpawn(29051, 172608, -88702, -5100, 64817, false, 0, false);
  1444. +               demon3.setIsImmobilized(true);
  1445. +               demon3.disableAllSkills();
  1446. +               FRINTEZZA_LAIR.updateKnownList(demon3);
  1447. +               demon1 = (L2MonsterInstance) addSpawn(29050, 175833, -87165, -5100, 35048, false, 0, false);
  1448. +               demon1.setIsImmobilized(true);
  1449. +               demon1.disableAllSkills();
  1450. +               FRINTEZZA_LAIR.updateKnownList(demon1);
  1451. +               demon4 = (L2MonsterInstance) addSpawn(29050, 172634, -87165, -5100, 57730, false, 0, false);
  1452. +               demon4.setIsImmobilized(true);
  1453. +               demon4.disableAllSkills();
  1454. +               FRINTEZZA_LAIR.updateKnownList(demon4);
  1455. +               startQuestTimer("camera_4", 6500, _overheadDummy, null, false);
  1456. +               break;
  1457. +          
  1458. +           case "camera_4":
  1459. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_frintezzaDummy.getObjectId(), 1800, 90, 8, 6500, 7000, 0, 0, 1, 0));
  1460. +               startQuestTimer("camera_5", 900, _frintezzaDummy, null, false);
  1461. +               break;
  1462. +          
  1463. +           case "camera_5":
  1464. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_frintezzaDummy.getObjectId(), 140, 90, 10, 2500, 4500, 0, 0, 1, 0));
  1465. +               startQuestTimer("camera_5b", 4000, _frintezzaDummy, null, false);
  1466. +               break;
  1467. +          
  1468. +           case "camera_5b":
  1469. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 40, 75, -10, 0, 1000, 0, 0, 1, 0));
  1470. +               startQuestTimer("camera_6", 0, frintezza, null, false);
  1471. +               break;
  1472. +          
  1473. +           case "camera_6":
  1474. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 40, 75, -10, 0, 12000, 0, 0, 1, 0));
  1475. +               startQuestTimer("camera_7", 1350, frintezza, null, false);
  1476. +               break;
  1477. +          
  1478. +           case "camera_7":
  1479. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(frintezza, 2));
  1480. +               startQuestTimer("camera_8", 7000, frintezza, null, false);
  1481. +               break;
  1482. +          
  1483. +           case "camera_8":
  1484. +               startQuestTimer("camera_9", 1000, frintezza, null, false);
  1485. +               _frintezzaDummy.deleteMe();
  1486. +               _frintezzaDummy = null;
  1487. +               break;
  1488. +          
  1489. +           case "camera_9":
  1490. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(demon2, 1));
  1491. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(demon3, 1));
  1492. +               startQuestTimer("camera_9b", 400, frintezza, null, false);
  1493. +               break;
  1494. +          
  1495. +           case "camera_9b":
  1496. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(demon1, 1));
  1497. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(demon4, 1));
  1498. +               for (L2Character pc : FRINTEZZA_LAIR.getCharactersInside())
  1499. +               {
  1500. +                   if (pc instanceof L2PcInstance)
  1501. +                       if (pc.getX() < 174232)
  1502. +                           pc.broadcastPacket(new SpecialCamera(_portraitDummy1.getObjectId(), 1000, 118, 0, 0, 1000, 0, 0, 1, 0));
  1503. +                       else
  1504. +                           pc.broadcastPacket(new SpecialCamera(_portraitDummy3.getObjectId(), 1000, 62, 0, 0, 1000, 0, 0, 1, 0));
  1505. +               }
  1506. +               startQuestTimer("camera_9c", 0, frintezza, null, false);
  1507. +               break;
  1508. +          
  1509. +           case "camera_9c":
  1510. +               for (L2Character pc : FRINTEZZA_LAIR.getCharactersInside())
  1511. +               {
  1512. +                   if (pc instanceof L2PcInstance)
  1513. +                       if (pc.getX() < 174232)
  1514. +                           pc.broadcastPacket(new SpecialCamera(_portraitDummy1.getObjectId(), 1000, 118, 0, 0, 10000, 0, 0, 1, 0));
  1515. +                       else
  1516. +                           pc.broadcastPacket(new SpecialCamera(_portraitDummy3.getObjectId(), 1000, 62, 0, 0, 10000, 0, 0, 1, 0));
  1517. +               }
  1518. +               startQuestTimer("camera_10", 2000, frintezza, null, false);
  1519. +               break;
  1520. +          
  1521. +           case "camera_10":
  1522. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 240, 90, 0, 0, 1000, 0, 0, 1, 0));
  1523. +               startQuestTimer("camera_11", 0, frintezza, null, false);
  1524. +               break;
  1525. +          
  1526. +           case "camera_11":
  1527. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 240, 90, 25, 5500, 10000, 0, 0, 1, 0));
  1528. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(frintezza, 3));
  1529. +               _portraitDummy1.deleteMe();
  1530. +               _portraitDummy3.deleteMe();
  1531. +               _portraitDummy1 = null;
  1532. +               _portraitDummy3 = null;
  1533. +               startQuestTimer("camera_12", 4500, frintezza, null, false);
  1534. +               break;
  1535. +          
  1536. +           case "camera_12":
  1537. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 100, 195, 35, 0, 10000, 0, 0, 1, 0));
  1538. +               startQuestTimer("camera_13", 700, frintezza, null, false);
  1539. +               break;
  1540. +          
  1541. +           case "camera_13":
  1542. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 100, 195, 35, 0, 10000, 0, 0, 1, 0));
  1543. +               startQuestTimer("camera_14", 1300, frintezza, null, false);
  1544. +               break;
  1545. +          
  1546. +           case "camera_14":
  1547. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 120, 180, 45, 1500, 10000, 0, 0, 1, 0));
  1548. +               FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(frintezza, frintezza, 5006, 1, 34000, 0));
  1549. +               FRINTEZZA_LAIR.broadcastPacket(new ExShowScreenMessage(1, 0, 2, false, 1, 0, 0, false, 5000, true, "Mournful Chorale Prelude"));
  1550. +               startQuestTimer("camera_16", 1500, frintezza, null, false);
  1551. +               break;
  1552. +          
  1553. +           case "camera_16":
  1554. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 520, 135, 45, 8000, 10000, 0, 0, 1, 0));
  1555. +               startQuestTimer("camera_17", 7500, frintezza, null, false);
  1556. +               break;
  1557. +          
  1558. +           case "camera_17":
  1559. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 1500, 110, 25, 10000, 13000, 0, 0, 1, 0));
  1560. +               startQuestTimer("camera_18", 9500, frintezza, null, false);
  1561. +               break;
  1562. +          
  1563. +           case "camera_18":
  1564. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_overheadDummy.getObjectId(), 930, 160, -20, 0, 1000, 0, 0, 1, 0));
  1565. +               startQuestTimer("camera_18b", 0, _overheadDummy, null, false);
  1566. +               break;
  1567. +          
  1568. +           case "camera_18b":
  1569. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_overheadDummy.getObjectId(), 600, 180, -25, 0, 10000, 0, 0, 1, 0));
  1570. +               FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(_scarletDummy, _overheadDummy, 5004, 1, 5800, 0));
  1571. +               weakScarlet = (L2GrandBossInstance) addSpawn(29046, 174232, -88020, -5110, 16384, false, 0, true);
  1572. +               weakScarlet.setIsInvul(true);
  1573. +               weakScarlet.setIsImmobilized(true);
  1574. +               weakScarlet.disableAllSkills();
  1575. +               FRINTEZZA_LAIR.updateKnownList(weakScarlet);
  1576. +               activeScarlet = weakScarlet;
  1577. +               startQuestTimer("camera_19", 2400, _scarletDummy, null, false);
  1578. +               startQuestTimer("camera_19b", 5000, _scarletDummy, null, false);
  1579. +               break;
  1580. +          
  1581. +           case "camera_19":
  1582. +               weakScarlet.teleToLocation(174232, -88020, -5110, 0);
  1583. +               break;
  1584. +          
  1585. +           case "camera_19b":
  1586. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(_scarletDummy.getObjectId(), 800, 180, 10, 1000, 10000, 0, 0, 1, 0));
  1587. +               startQuestTimer("camera_20", 2100, _scarletDummy, null, false);
  1588. +               break;
  1589. +          
  1590. +           case "camera_20":
  1591. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(weakScarlet.getObjectId(), 300, 60, 8, 0, 10000, 0, 0, 1, 0));
  1592. +               startQuestTimer("camera_21", 2000, weakScarlet, null, false);
  1593. +               break;
  1594. +          
  1595. +           case "camera_21":
  1596. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(weakScarlet.getObjectId(), 500, 90, 10, 3000, 5000, 0, 0, 1, 0));
  1597. +               startQuestTimer("camera_22", 3000, weakScarlet, null, false);
  1598. +               break;
  1599. +          
  1600. +           case "camera_22":
  1601. +               portrait2 = (L2MonsterInstance) addSpawn(29049, 175876, -88713, -5000, 28205, false, 0, false);
  1602. +               portrait2.setIsImmobilized(true);
  1603. +               portrait2.disableAllSkills();
  1604. +               FRINTEZZA_LAIR.updateKnownList(portrait2);
  1605. +               portrait3 = (L2MonsterInstance) addSpawn(29049, 172608, -88702, -5000, 64817, false, 0, false);
  1606. +               portrait3.setIsImmobilized(true);
  1607. +               portrait3.disableAllSkills();
  1608. +               FRINTEZZA_LAIR.updateKnownList(portrait3);
  1609. +               portrait1 = (L2MonsterInstance) addSpawn(29048, 175833, -87165, -5000, 35048, false, 0, false);
  1610. +               portrait1.setIsImmobilized(true);
  1611. +               portrait1.disableAllSkills();
  1612. +               FRINTEZZA_LAIR.updateKnownList(portrait1);
  1613. +               portrait4 = (L2MonsterInstance) addSpawn(29048, 172634, -87165, -5000, 57730, false, 0, false);
  1614. +               portrait4.setIsImmobilized(true);
  1615. +               portrait4.disableAllSkills();
  1616. +               FRINTEZZA_LAIR.updateKnownList(portrait4);
  1617. +               _overheadDummy.deleteMe();
  1618. +               _scarletDummy.deleteMe();
  1619. +               _overheadDummy = null;
  1620. +               _scarletDummy = null;
  1621. +               startQuestTimer("camera_23", 2000, weakScarlet, null, false);
  1622. +               startQuestTimer("start_pc", 2000, weakScarlet, null, false);
  1623. +               startQuestTimer("loc_check", 60000, weakScarlet, null, true);
  1624. +               startQuestTimer("songs_play", 10000 + Rnd.get(10000), frintezza, null, false);
  1625. +               startQuestTimer("skill01", 10000 + Rnd.get(10000), weakScarlet, null, false);
  1626. +               break;
  1627. +          
  1628. +           case "camera_23":
  1629. +               demon1.setIsImmobilized(false);
  1630. +               demon2.setIsImmobilized(false);
  1631. +               demon3.setIsImmobilized(false);
  1632. +               demon4.setIsImmobilized(false);
  1633. +               demon1.enableAllSkills();
  1634. +               demon2.enableAllSkills();
  1635. +               demon3.enableAllSkills();
  1636. +               demon4.enableAllSkills();
  1637. +               portrait1.setIsImmobilized(false);
  1638. +               portrait2.setIsImmobilized(false);
  1639. +               portrait3.setIsImmobilized(false);
  1640. +               portrait4.setIsImmobilized(false);
  1641. +               portrait1.enableAllSkills();
  1642. +               portrait2.enableAllSkills();
  1643. +               portrait3.enableAllSkills();
  1644. +               portrait4.enableAllSkills();
  1645. +               weakScarlet.setIsInvul(false);
  1646. +               weakScarlet.setIsImmobilized(false);
  1647. +               weakScarlet.enableAllSkills();
  1648. +               weakScarlet.setRunning();
  1649. +               startQuestTimer("spawn_minion", 20000, portrait1, null, false);
  1650. +               startQuestTimer("spawn_minion", 20000, portrait2, null, false);
  1651. +               startQuestTimer("spawn_minion", 20000, portrait3, null, false);
  1652. +               startQuestTimer("spawn_minion", 20000, portrait4, null, false);
  1653. +               break;
  1654. +          
  1655. +           case "stop_pc":
  1656. +               for (L2Character cha : FRINTEZZA_LAIR.getCharactersInside())
  1657. +               {
  1658. +                   cha.abortAttack();
  1659. +                   cha.abortCast();
  1660. +                   cha.disableAllSkills();
  1661. +                   cha.setTarget(null);
  1662. +                   cha.stopMove(null);
  1663. +                   cha.setIsImmobilized(true);
  1664. +                   cha.getAI().setIntention(CtrlIntention.IDLE);
  1665. +               }
  1666. +               break;
  1667. +          
  1668. +           case "stop_npc":
  1669. +               _Heading = npc.getHeading();
  1670. +               if (_Heading < 32768)
  1671. +                   _Angle = Math.abs(180 - (int) (_Heading / 182.044444444));
  1672. +               else
  1673. +                   _Angle = Math.abs(540 - (int) (_Heading / 182.044444444));
  1674. +               break;
  1675. +          
  1676. +           case "start_pc":
  1677. +               for (L2Character cha : FRINTEZZA_LAIR.getCharactersInside())
  1678. +               {
  1679. +                   if (cha != frintezza)
  1680. +                   {
  1681. +                       cha.enableAllSkills();
  1682. +                       cha.setIsImmobilized(false);
  1683. +                   }
  1684. +               }
  1685. +               break;
  1686. +          
  1687. +           case "start_npc":
  1688. +               npc.setRunning();
  1689. +               npc.setIsInvul(false);
  1690. +               break;
  1691. +          
  1692. +           case "morph_end":
  1693. +               _OnMorph = 0;
  1694. +               break;
  1695. +          
  1696. +           case "morph_01":
  1697. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(weakScarlet.getObjectId(), 250, _Angle, 12, 2000, 15000, 0, 0, 1, 0));
  1698. +               startQuestTimer("morph_02", 3000, weakScarlet, null, false);
  1699. +               break;
  1700. +          
  1701. +           case "morph_02":
  1702. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(weakScarlet, 1));
  1703. +               frintezza.setRHandId(7903); // fake weapon
  1704. +               startQuestTimer("morph_03", 4000, weakScarlet, null, false);
  1705. +               break;
  1706. +          
  1707. +           case "morph_03":
  1708. +               startQuestTimer("morph_04", 1500, weakScarlet, null, false);
  1709. +               break;
  1710. +          
  1711. +           case "morph_04":
  1712. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(weakScarlet, 4));
  1713. +               L2Skill skill = SkillTable.getInstance().getInfo(DAEMON_MORPH, 1);
  1714. +               if (skill != null)
  1715. +                   skill.getEffects(weakScarlet, weakScarlet);
  1716. +              
  1717. +               startQuestTimer("morph_end", 6000, weakScarlet, null, false);
  1718. +               startQuestTimer("start_pc", 3000, weakScarlet, null, false);
  1719. +               startQuestTimer("start_npc", 3000, weakScarlet, null, false);
  1720. +               startQuestTimer("songs_play", 10000 + Rnd.get(10000), frintezza, null, false);
  1721. +               startQuestTimer("skill02", 10000 + Rnd.get(10000), weakScarlet, null, false);
  1722. +               break;
  1723. +          
  1724. +           case "morph_05a":
  1725. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(frintezza, 4));
  1726. +               break;
  1727. +          
  1728. +           case "morph_05":
  1729. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 250, 120, 15, 0, 1000, 0, 0, 1, 0));
  1730. +               startQuestTimer("morph_06", 0, frintezza, null, false);
  1731. +               break;
  1732. +          
  1733. +           case "morph_06":
  1734. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 250, 120, 15, 0, 10000, 0, 0, 1, 0));
  1735. +               cancelQuestTimers("loc_check");
  1736. +               _Scarlet_x = weakScarlet.getX();
  1737. +               _Scarlet_y = weakScarlet.getY();
  1738. +               _Scarlet_z = weakScarlet.getZ();
  1739. +               _Scarlet_h = weakScarlet.getHeading();
  1740. +               weakScarlet.deleteMe();
  1741. +               weakScarlet = null;
  1742. +               activeScarlet = null;
  1743. +               weakScarlet = (L2GrandBossInstance) addSpawn(29046, _Scarlet_x, _Scarlet_y, _Scarlet_z, _Scarlet_h, false, 0, false);
  1744. +               weakScarlet.setIsInvul(true);
  1745. +               weakScarlet.setIsImmobilized(true);
  1746. +               weakScarlet.disableAllSkills();
  1747. +               weakScarlet.setRHandId(7903);
  1748. +               FRINTEZZA_LAIR.updateKnownList(weakScarlet);
  1749. +               startQuestTimer("morph_07", 7000, frintezza, null, false);
  1750. +               break;
  1751. +          
  1752. +           case "morph_07":
  1753. +               FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(frintezza, frintezza, 5006, 1, 34000, 0));
  1754. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 500, 70, 15, 3000, 10000, 0, 0, 1, 0));
  1755. +               startQuestTimer("morph_08", 3000, frintezza, null, false);
  1756. +               break;
  1757. +          
  1758. +           case "morph_08":
  1759. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 2500, 90, 12, 6000, 10000, 0, 0, 1, 0));
  1760. +               startQuestTimer("morph_09", 3000, frintezza, null, false);
  1761. +               break;
  1762. +          
  1763. +           case "morph_09":
  1764. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(weakScarlet.getObjectId(), 250, _Angle, 12, 0, 1000, 0, 0, 1, 0));
  1765. +               startQuestTimer("morph_10", 0, weakScarlet, null, false);
  1766. +               break;
  1767. +          
  1768. +           case "morph_10":
  1769. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(weakScarlet.getObjectId(), 250, _Angle, 12, 0, 10000, 0, 0, 1, 0));
  1770. +               startQuestTimer("morph_11", 500, weakScarlet, null, false);
  1771. +               break;
  1772. +          
  1773. +           case "morph_11":
  1774. +               weakScarlet.doDie(weakScarlet);
  1775. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(weakScarlet.getObjectId(), 450, _Angle, 14, 8000, 8000, 0, 0, 1, 0));
  1776. +               startQuestTimer("morph_12", 6250, weakScarlet, null, false);
  1777. +               startQuestTimer("morph_13", 7200, weakScarlet, null, false);
  1778. +               break;
  1779. +          
  1780. +           case "morph_12":
  1781. +               weakScarlet.deleteMe();
  1782. +               weakScarlet = null;
  1783. +               break;
  1784. +          
  1785. +           case "morph_13":
  1786. +               strongScarlet = (L2GrandBossInstance) addSpawn(SCARLET2, _Scarlet_x, _Scarlet_y, _Scarlet_z, _Scarlet_h, false, 0, false);
  1787. +               strongScarlet.setIsInvul(true);
  1788. +               strongScarlet.setIsImmobilized(true);
  1789. +               strongScarlet.disableAllSkills();
  1790. +               FRINTEZZA_LAIR.updateKnownList(strongScarlet);
  1791. +               activeScarlet = strongScarlet;
  1792. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(strongScarlet.getObjectId(), 450, _Angle, 12, 500, 14000, 0, 0, 1, 0));
  1793. +               startQuestTimer("morph_14", 3000, strongScarlet, null, false);
  1794. +               startQuestTimer("loc_check", 60000, strongScarlet, null, true);
  1795. +               break;
  1796. +          
  1797. +           case "morph_14":
  1798. +               startQuestTimer("morph_15", 5100, strongScarlet, null, false);
  1799. +               break;
  1800. +          
  1801. +           case "morph_15":
  1802. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(strongScarlet, 2));
  1803. +               L2Skill skill1 = SkillTable.getInstance().getInfo(DAEMON_MORPH, 1);
  1804. +               if (skill1 != null)
  1805. +                   skill1.getEffects(strongScarlet, strongScarlet);
  1806. +              
  1807. +               startQuestTimer("morph_end", 9000, strongScarlet, null, false);
  1808. +               startQuestTimer("start_pc", 6000, strongScarlet, null, false);
  1809. +               startQuestTimer("start_npc", 6000, strongScarlet, null, false);
  1810. +               startQuestTimer("songs_play", 10000 + Rnd.get(10000), frintezza, null, false);
  1811. +               startQuestTimer("skill03", 10000 + Rnd.get(10000), strongScarlet, null, false);
  1812. +               break;
  1813. +          
  1814. +           case "morph_16":
  1815. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(strongScarlet.getObjectId(), 300, _Angle - 180, 5, 0, 7000, 0, 0, 1, 0));
  1816. +               startQuestTimer("morph_17", 0, strongScarlet, null, false);
  1817. +               break;
  1818. +          
  1819. +           case "morph_17":
  1820. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(strongScarlet.getObjectId(), 200, _Angle, 85, 4000, 10000, 0, 0, 1, 0));
  1821. +               startQuestTimer("morph_17b", 7400, frintezza, null, false);
  1822. +               startQuestTimer("morph_18", 7500, frintezza, null, false);
  1823. +               break;
  1824. +          
  1825. +           case "morph_17b":
  1826. +               frintezza.doDie(frintezza);
  1827. +               break;
  1828. +          
  1829. +           case "morph_18":
  1830. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 100, 120, 5, 0, 7000, 0, 0, 1, 0));
  1831. +               startQuestTimer("morph_19", 0, frintezza, null, false);
  1832. +               break;
  1833. +          
  1834. +           case "morph_19":
  1835. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 100, 90, 5, 5000, 15000, 0, 0, 1, 0));
  1836. +               startQuestTimer("morph_20", 7000, frintezza, null, false);
  1837. +               startQuestTimer("spawn_cubes", 7000, frintezza, null, false);
  1838. +               break;
  1839. +          
  1840. +           case "morph_20":
  1841. +               FRINTEZZA_LAIR.broadcastPacket(new SpecialCamera(frintezza.getObjectId(), 900, 90, 25, 7000, 10000, 0, 0, 1, 0));
  1842. +               FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(frintezza, frintezza, FRINTEZZA_SONGS, 2, 32000, 0));
  1843. +               FRINTEZZA_LAIR.broadcastPacket(new ExShowScreenMessage(1, 0, 2, false, 1, 0, 0, false, 5000, true, "Frenetic Toccata"));
  1844. +               startQuestTimer("start_pc", 7000, frintezza, null, false);
  1845. +               break;
  1846. +          
  1847. +           case "songs_play":
  1848. +               if (frintezza != null && !frintezza.isDead() && _OnMorph == 0)
  1849. +               {
  1850. +                   _OnSong = Rnd.get(1, 5);
  1851. +                   if (_OnSong == 1 && _ThirdMorph == 1 && strongScarlet.getCurrentHp() < strongScarlet.getMaxHp() * 0.6 && Rnd.get(100) < 80)
  1852. +                   {
  1853. +                       FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(frintezza, frintezza, 5007, 1, 32000, 0));
  1854. +                       startQuestTimer("songs_effect", 5000, frintezza, null, false);
  1855. +                       startQuestTimer("songs_play", 32000 + Rnd.get(10000), frintezza, null, false);
  1856. +                   }
  1857. +                   else if (_OnSong == 2 || _OnSong == 3)
  1858. +                   {
  1859. +                       FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(frintezza, frintezza, 5007, _OnSong, 32000, 0));
  1860. +                       startQuestTimer("songs_effect", 5000, frintezza, null, false);
  1861. +                       startQuestTimer("songs_play", 32000 + Rnd.get(10000), frintezza, null, false);
  1862. +                   }
  1863. +                   else if (_OnSong == 4 && _SecondMorph == 1)
  1864. +                   {
  1865. +                       FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(frintezza, frintezza, 5007, 4, 31000, 0));
  1866. +                       startQuestTimer("songs_effect", 5000, frintezza, null, false);
  1867. +                       startQuestTimer("songs_play", 31000 + Rnd.get(10000), frintezza, null, false);
  1868. +                   }
  1869. +                   else if (_OnSong == 5 && _ThirdMorph == 1 && _Abnormal == 0)
  1870. +                   {
  1871. +                       _Abnormal = 1;
  1872. +                       FRINTEZZA_LAIR.broadcastPacket(new MagicSkillUse(frintezza, frintezza, 5007, 5, 35000, 0));
  1873. +                       startQuestTimer("songs_effect", 5000, frintezza, null, false);
  1874. +                       startQuestTimer("songs_play", 35000 + Rnd.get(10000), frintezza, null, false);
  1875. +                   }
  1876. +                   else
  1877. +                       startQuestTimer("songs_play", 5000 + Rnd.get(5000), frintezza, null, false);
  1878. +               }
  1879. +               break;
  1880. +          
  1881. +           case "songs_effect":
  1882. +               L2Skill skill2 = SkillTable.getInstance().getInfo(FRINTEZZA_SONGS, _OnSong);
  1883. +               if (skill2 == null)
  1884. +                   return null;
  1885. +              
  1886. +               switch (_OnSong)
  1887. +               {
  1888. +                   case 1:
  1889. +                   case 2:
  1890. +                   case 3:
  1891. +                       if (frintezza != null && !frintezza.isDead() && activeScarlet != null && !activeScarlet.isDead())
  1892. +                           skill2.getEffects(frintezza, activeScarlet);
  1893. +                       break;
  1894. +                      
  1895. +                   case 4:
  1896. +                       for (L2Character cha : FRINTEZZA_LAIR.getCharactersInside())
  1897. +                       {
  1898. +                           if (cha instanceof L2PcInstance && Rnd.get(100) < 80)
  1899. +                           {
  1900. +                               skill2.getEffects(frintezza, cha);
  1901. +                               cha.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT).addSkillName(FRINTEZZA_SONGS, 4));
  1902. +                           }
  1903. +                       }
  1904. +                       break;
  1905. +                      
  1906. +                   case 5:
  1907. +                       for (L2Character cha : FRINTEZZA_LAIR.getCharactersInside())
  1908. +                       {
  1909. +                           if (cha instanceof L2PcInstance && Rnd.get(100) < 70)
  1910. +                           {
  1911. +                               cha.abortAttack();
  1912. +                               cha.abortCast();
  1913. +                               cha.disableAllSkills();
  1914. +                               cha.stopMove(null);
  1915. +                               cha.setIsParalyzed(true);
  1916. +                               cha.setIsImmobilized(true);
  1917. +                               cha.getAI().setIntention(CtrlIntention.IDLE);
  1918. +                               skill2.getEffects(frintezza, cha);
  1919. +                               cha.startAbnormalEffect(AbnormalEffect.DANCE_STUNNED);
  1920. +                               cha.sendPacket(SystemMessage.getSystemMessage(SystemMessageId.YOU_FEEL_S1_EFFECT).addSkillName(FRINTEZZA_SONGS, 5));
  1921. +                           }
  1922. +                       }
  1923. +                       startQuestTimer("stop_effect", 25000, frintezza, null, false);
  1924. +                       break;
  1925. +               }
  1926. +               break;
  1927. +          
  1928. +           case "stop_effect":
  1929. +               for (L2Character cha : FRINTEZZA_LAIR.getCharactersInside())
  1930. +               {
  1931. +                   if (cha instanceof L2PcInstance)
  1932. +                   {
  1933. +                       cha.stopAbnormalEffect(AbnormalEffect.DANCE_STUNNED);
  1934. +                       cha.stopAbnormalEffect(AbnormalEffect.FLOATING_ROOT);
  1935. +                       cha.enableAllSkills();
  1936. +                       cha.setIsImmobilized(false);
  1937. +                       cha.setIsParalyzed(false);
  1938. +                   }
  1939. +               }
  1940. +               _Abnormal = 0;
  1941. +               break;
  1942. +          
  1943. +           case "attack_stop":
  1944. +               cancelQuestTimers("skill01");
  1945. +               cancelQuestTimers("skill02");
  1946. +               cancelQuestTimers("skill03");
  1947. +               cancelQuestTimers("songs_play");
  1948. +               cancelQuestTimers("songs_effect");
  1949. +              
  1950. +               if (frintezza != null)
  1951. +                   FRINTEZZA_LAIR.broadcastPacket(new MagicSkillCanceld(frintezza.getObjectId()));
  1952. +               break;
  1953. +          
  1954. +           case "check_hp":
  1955. +               if (npc.isDead())
  1956. +               {
  1957. +                   _OnMorph = 1;
  1958. +                   FRINTEZZA_LAIR.broadcastPacket(new PlaySound(1, "BS01_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
  1959. +                  
  1960. +                   startQuestTimer("attack_stop", 0, frintezza, null, false);
  1961. +                   startQuestTimer("stop_pc", 0, npc, null, false);
  1962. +                   startQuestTimer("stop_npc", 0, npc, null, false);
  1963. +                   startQuestTimer("morph_16", 0, npc, null, false);
  1964. +               }
  1965. +               else
  1966. +               {
  1967. +                   _CheckDie = _CheckDie + 10;
  1968. +                   if (_CheckDie < 3000)
  1969. +                       startQuestTimer("check_hp", 10, npc, null, false);
  1970. +                   else
  1971. +                   {
  1972. +                       _OnCheck = 0;
  1973. +                       _CheckDie = 0;
  1974. +                   }
  1975. +               }
  1976. +               break;
  1977. +          
  1978. +           case "skill01":
  1979. +               if (weakScarlet != null && !weakScarlet.isDead() && _SecondMorph == 0 && _ThirdMorph == 0 && _OnMorph == 0)
  1980. +               {
  1981. +                   int i = Rnd.get(0, 1);
  1982. +                   L2Skill skill3 = SkillTable.getInstance().getInfo(SKILLS[i][0], SKILLS[i][1]);
  1983. +                   if (skill3 != null)
  1984. +                   {
  1985. +                       weakScarlet.stopMove(null);
  1986. +                       weakScarlet.setIsCastingNow(true);
  1987. +                       weakScarlet.doCast(skill3);
  1988. +                   }
  1989. +                   startQuestTimer("skill01", SKILLS[i][2] + 5000 + Rnd.get(10000), npc, null, false);
  1990. +               }
  1991. +               break;
  1992. +          
  1993. +           case "skill02":
  1994. +               if (weakScarlet != null && !weakScarlet.isDead() && _SecondMorph == 1 && _ThirdMorph == 0 && _OnMorph == 0)
  1995. +               {
  1996. +                   int i = 0;
  1997. +                   if (_Abnormal == 0)
  1998. +                       i = Rnd.get(2, 5);
  1999. +                   else
  2000. +                       i = Rnd.get(2, 4);
  2001. +                  
  2002. +                   L2Skill skill4 = SkillTable.getInstance().getInfo(SKILLS[i][0], SKILLS[i][1]);
  2003. +                   if (skill4 != null)
  2004. +                   {
  2005. +                       weakScarlet.stopMove(null);
  2006. +                       weakScarlet.setIsCastingNow(true);
  2007. +                       weakScarlet.doCast(skill4);
  2008. +                   }
  2009. +                   startQuestTimer("skill02", SKILLS[i][2] + 5000 + Rnd.get(10000), npc, null, false);
  2010. +                  
  2011. +                   if (i == 5)
  2012. +                   {
  2013. +                       _Abnormal = 1;
  2014. +                       startQuestTimer("float_effect", 4000, weakScarlet, null, false);
  2015. +                   }
  2016. +               }
  2017. +               break;
  2018. +          
  2019. +           case "skill03":
  2020. +               if (strongScarlet != null && !strongScarlet.isDead() && _SecondMorph == 1 && _ThirdMorph == 1 && _OnMorph == 0)
  2021. +               {
  2022. +                   int i = 0;
  2023. +                   if (_Abnormal == 0)
  2024. +                       i = Rnd.get(6, 10);
  2025. +                   else
  2026. +                       i = Rnd.get(6, 9);
  2027. +                  
  2028. +                   L2Skill skill5 = SkillTable.getInstance().getInfo(SKILLS[i][0], SKILLS[i][1]);
  2029. +                   if (skill5 != null)
  2030. +                   {
  2031. +                       strongScarlet.stopMove(null);
  2032. +                       strongScarlet.setIsCastingNow(true);
  2033. +                       strongScarlet.doCast(skill5);
  2034. +                   }
  2035. +                   startQuestTimer("skill03", SKILLS[i][2] + 5000 + Rnd.get(10000), npc, null, false);
  2036. +                  
  2037. +                   if (i == 10)
  2038. +                   {
  2039. +                       _Abnormal = 1;
  2040. +                       startQuestTimer("float_effect", 3000, npc, null, false);
  2041. +                   }
  2042. +               }
  2043. +               break;
  2044. +          
  2045. +           case "float_effect":
  2046. +               if (npc.isCastingNow())
  2047. +               {
  2048. +                   startQuestTimer("float_effect", 500, npc, null, false);
  2049. +               }
  2050. +               else
  2051. +               {
  2052. +                   for (L2Character cha : FRINTEZZA_LAIR.getCharactersInside())
  2053. +                   {
  2054. +                       if (cha instanceof L2PcInstance)
  2055. +                       {
  2056. +                           if (cha.getFirstEffect(YOKE_OF_SCARLET) != null)
  2057. +                           {
  2058. +                               cha.abortAttack();
  2059. +                               cha.abortCast();
  2060. +                               cha.disableAllSkills();
  2061. +                               cha.stopMove(null);
  2062. +                               cha.setIsParalyzed(true);
  2063. +                               cha.setIsImmobilized(true);
  2064. +                               cha.getAI().setIntention(CtrlIntention.IDLE);
  2065. +                               cha.startAbnormalEffect(AbnormalEffect.FLOATING_ROOT);
  2066. +                           }
  2067. +                       }
  2068. +                   }
  2069. +                   startQuestTimer("stop_effect", 25000, npc, null, false);
  2070. +               }
  2071. +               break;
  2072. +          
  2073. +           case "action":
  2074. +               FRINTEZZA_LAIR.broadcastPacket(new SocialAction(npc, 1));
  2075. +               break;
  2076. +          
  2077. +           case "bomber":
  2078. +               _Bomber = 0;
  2079. +               break;
  2080. +          
  2081. +           case "room_final":
  2082. +               FRINTEZZA_LAIR.broadcastPacket(new NpcSay(npc.getObjectId(), 1, npc.getNpcId(), "Exceeded his time limit, challenge failed!"));
  2083. +               FRINTEZZA_LAIR.oustAllPlayers();
  2084. +               cancelQuestTimers("waiting");
  2085. +               cancelQuestTimers("frintezza_despawn");
  2086. +               startQuestTimer("clean", 1000, npc, null, false);
  2087. +               startQuestTimer("close", 1000, npc, null, false);
  2088. +               startQuestTimer("room1_del", 1000, npc, null, false);
  2089. +               startQuestTimer("room2_del", 1000, npc, null, false);
  2090. +               GrandBossManager.getInstance().setBossStatus(FRINTEZZA, DORMANT);
  2091. +               break;
  2092. +          
  2093. +           case "frintezza_despawn":
  2094. +               temp = (System.currentTimeMillis() - _LastAction);
  2095. +               if (temp > Config.DESPAWN_TIME_FRINTEZZA)
  2096. +               {
  2097. +                   FRINTEZZA_LAIR.oustAllPlayers();
  2098. +                   cancelQuestTimers("waiting");
  2099. +                   cancelQuestTimers("loc_check");
  2100. +                   cancelQuestTimers("room_final");
  2101. +                   cancelQuestTimers("spawn_minion");
  2102. +                   startQuestTimer("clean", 1000, npc, null, false);
  2103. +                   startQuestTimer("close", 1000, npc, null, false);
  2104. +                   startQuestTimer("attack_stop", 1000, npc, null, false);
  2105. +                   startQuestTimer("room1_del", 1000, npc, null, false);
  2106. +                   startQuestTimer("room2_del", 1000, npc, null, false);
  2107. +                   startQuestTimer("room3_del", 1000, npc, null, false);
  2108. +                   startQuestTimer("minions_despawn", 1000, npc, null, false);
  2109. +                   GrandBossManager.getInstance().setBossStatus(FRINTEZZA, DORMANT);
  2110. +                   cancelQuestTimers("frintezza_despawn");
  2111. +               }
  2112. +               break;
  2113. +          
  2114. +           case "minions_despawn":
  2115. +               for (int i = 0; i < Minions.size(); i++)
  2116. +               {
  2117. +                   if (Minions.get(i) != null)
  2118. +                   {
  2119. +                       L2Attackable mob = Minions.get(i);
  2120. +                       if (mob != null)
  2121. +                           mob.decayMe();
  2122. +                   }
  2123. +               }
  2124. +               Minions.clear();
  2125. +               break;
  2126. +          
  2127. +           case "spawn_minion":
  2128. +               if (npc != null && !npc.isDead() && frintezza != null && !frintezza.isDead())
  2129. +               {
  2130. +                   L2Npc mob = addSpawn(npc.getNpcId() + 2, npc.getX(), npc.getY(), npc.getZ(), npc.getHeading(), false, 0, false);
  2131. +                   ((L2Attackable) mob).setIsRaidMinion(true);
  2132. +                   Minions.add((L2Attackable) mob);
  2133. +                   startQuestTimer("action", 200, mob, null, false);
  2134. +                   startQuestTimer("spawn_minion", 18000, npc, null, false);
  2135. +               }
  2136. +               break;
  2137. +          
  2138. +           case "spawn_cubes":
  2139. +               addSpawn(CUBE, 174232, -88020, -5114, 16384, false, 900000, false);
  2140. +               break;
  2141. +          
  2142. +           case "frintezza_unlock":
  2143. +               GrandBossManager.getInstance().setBossStatus(FRINTEZZA, DORMANT);
  2144. +               break;
  2145. +          
  2146. +           case "remove_players":
  2147. +               FRINTEZZA_LAIR.oustAllPlayers();
  2148. +               break;
  2149. +       }
  2150. +       return super.onAdvEvent(event, npc, player);
  2151. +   }
  2152. +  
  2153. +   @Override
  2154. +   public String onTalk(L2Npc npc, L2PcInstance player)
  2155. +   {
  2156. +       String htmltext = "";
  2157. +       switch (npc.getNpcId())
  2158. +       {
  2159. +           case CUBE:
  2160. +               player.teleToLocation(150037 + Rnd.get(500), -57720 + Rnd.get(500), -2976, 0);
  2161. +               break;
  2162. +       }
  2163. +      
  2164. +       switch (GrandBossManager.getInstance().getBossStatus(FRINTEZZA))
  2165. +       {
  2166. +           case DEAD:
  2167. +               htmltext = "<html><body>There is nothing beyond the Magic Force Field. Come back later.<br>(You may not enter because Frintezza is not inside the Imperial Tomb.)</body></html>";
  2168. +               break;
  2169. +          
  2170. +           case DORMANT:
  2171. +               boolean party_check_success = true;
  2172. +              
  2173. +               if (!player.isGM()) // GMs can enter without a party.
  2174. +               {
  2175. +                   if ((!player.isInParty() || !player.getParty().isLeader(player)) || (player.getParty().getCommandChannel() == null) || (player.getParty().getCommandChannel().getChannelLeader() != player))
  2176. +                   {
  2177. +                       htmltext = "<html><body>No reaction. Contact must be initiated by the Command Channel Leader.</body></html>";
  2178. +                       party_check_success = false;
  2179. +                   }
  2180. +                   else if (player.getParty().getCommandChannel().getPartys().size() < Config.FRINTEZZA_MIN_PARTIES || player.getParty().getCommandChannel().getPartys().size() > Config.FRINTEZZA_MAX_PARTIES)
  2181. +                   {
  2182. +                       htmltext = "<html><body>Your command channel needs to have at least " + Config.FRINTEZZA_MIN_PARTIES + " parties and a maximum of " + Config.FRINTEZZA_MAX_PARTIES + ".</body></html>";
  2183. +                       party_check_success = false;
  2184. +                   }
  2185. +               }
  2186. +              
  2187. +               if (!Config.BYPASS_FRINTEZZA_PARTIES_CHECK)
  2188. +               {
  2189. +                   if ((!player.isInParty() || !player.getParty().isLeader(player)) || (player.getParty().getCommandChannel() == null) || (player.getParty().getCommandChannel().getChannelLeader() != player))
  2190. +                   {
  2191. +                       htmltext = "<html><body>No reaction. Contact must be initiated by the Command Channel Leader.</body></html>";
  2192. +                       party_check_success = false;
  2193. +                   }
  2194. +                   else if (player.getParty().getCommandChannel().getPartys().size() < Config.FRINTEZZA_MIN_PARTIES || player.getParty().getCommandChannel().getPartys().size() > Config.FRINTEZZA_MAX_PARTIES)
  2195. +                   {
  2196. +                       htmltext = "<html><body>Your command channel needs to have at least " + Config.FRINTEZZA_MIN_PARTIES + " parties and a maximum of " + Config.FRINTEZZA_MAX_PARTIES + ".</body></html>";
  2197. +                       party_check_success = false;
  2198. +                   }              
  2199. +               }
  2200. +              
  2201. +               if (party_check_success)
  2202. +               {
  2203. +                   if (player.getInventory().getItemByItemId(SCROLL) == null)
  2204. +                   {
  2205. +                       htmltext = "<html><body>You dont have required item.</body></html>";
  2206. +                   }
  2207. +                   else
  2208. +                   {
  2209. +                       player.destroyItemByItemId("Quest", SCROLL, 1, player, true);
  2210. +                       GrandBossManager.getInstance().setBossStatus(FRINTEZZA, WAITING);
  2211. +                       startQuestTimer("close", 0, npc, null, false);
  2212. +                       startQuestTimer("room1_spawn", 5000, npc, null, false);
  2213. +                       startQuestTimer("room_final", 2100000, null, null, false);
  2214. +                       startQuestTimer("frintezza_despawn", 60000, null, null, true);
  2215. +                       _LastAction = System.currentTimeMillis();
  2216. +                      
  2217. +                       if (Config.BYPASS_FRINTEZZA_PARTIES_CHECK)
  2218. +                       {
  2219. +                           if (player.getParty() != null)
  2220. +                           {
  2221. +                               L2CommandChannel CC = player.getParty().getCommandChannel();
  2222. +                              
  2223. +                               if (CC != null)
  2224. +                               { // teleport all parties into CC reb12
  2225. +                                  
  2226. +                                   for (L2Party party : CC.getPartys())
  2227. +                                   {
  2228. +                                       if (party == null)
  2229. +                                           continue;
  2230. +                                      
  2231. +                                       synchronized (_PlayersInside)
  2232. +                                       {
  2233. +                                           for (L2PcInstance member : party.getPartyMembers())
  2234. +                                           {
  2235. +                                               if (member == null || member.getLevel() < MIN_LEVEL)
  2236. +                                                   continue;
  2237. +                                               if (!member.isInsideRadius(npc, 700, false, false))
  2238. +                                                   continue;
  2239. +                                               if (_PlayersInside.size() > 45)
  2240. +                                               {
  2241. +                                                   member.sendMessage("The number of challenges have been full, so can not enter.");
  2242. +                                                   break;
  2243. +                                               }
  2244. +                                               _PlayersInside.add(member);
  2245. +                                               FRINTEZZA_LAIR.allowPlayerEntry(member, 300);
  2246. +                                               member.teleToLocation(INVADE_LOC[_LocCycle][0] + Rnd.get(50), INVADE_LOC[_LocCycle][1] + Rnd.get(50), INVADE_LOC[_LocCycle][2], 0);
  2247. +                                           }
  2248. +                                           if (_PlayersInside.size() > 45)
  2249. +                                               break;
  2250. +                                       }
  2251. +                                       _LocCycle++;
  2252. +                                       if (_LocCycle >= 6)
  2253. +                                           _LocCycle = 1;
  2254. +                                   }
  2255. +                               }
  2256. +                               else
  2257. +                               { // teleport just actual party reb12
  2258. +                                  
  2259. +                                   L2Party party = player.getParty();
  2260. +                                  
  2261. +                                   for (L2PcInstance member : party.getPartyMembers())
  2262. +                                   {
  2263. +                                       if (member == null || member.getLevel() < MIN_LEVEL)
  2264. +                                           continue;
  2265. +                                       if (!member.isInsideRadius(npc, 700, false, false))
  2266. +                                           continue;
  2267. +                                      
  2268. +                                       synchronized (_PlayersInside)
  2269. +                                       {
  2270. +                                           if (_PlayersInside.size() > 45)
  2271. +                                           {
  2272. +                                               member.sendMessage("The number of challenges have been full, so can not enter.");
  2273. +                                               break;
  2274. +                                           }
  2275. +                                           _PlayersInside.add(member);
  2276. +                                       }
  2277. +                                      
  2278. +                                       FRINTEZZA_LAIR.allowPlayerEntry(member, 300);
  2279. +                                       member.teleToLocation(INVADE_LOC[_LocCycle][0] + Rnd.get(50), INVADE_LOC[_LocCycle][1] + Rnd.get(50), INVADE_LOC[_LocCycle][2], 0);
  2280. +                                   }
  2281. +                                   _LocCycle++;
  2282. +                                   if (_LocCycle >= 6)
  2283. +                                       _LocCycle = 1;
  2284. +                               }
  2285. +                           }
  2286. +                           else
  2287. +                           { // teleport just player reb12
  2288. +                               if (player.isInsideRadius(npc, 700, false, false))
  2289. +                               {
  2290. +                                   synchronized (_PlayersInside)
  2291. +                                   {
  2292. +                                       _PlayersInside.add(player);
  2293. +                                   }
  2294. +                                   player.teleToLocation(INVADE_LOC[_LocCycle][0] + Rnd.get(50), INVADE_LOC[_LocCycle][1] + Rnd.get(50), INVADE_LOC[_LocCycle][2], 0);
  2295. +                               }
  2296. +                           }
  2297. +                       }
  2298. +                       else
  2299. +                       {
  2300. +                           L2CommandChannel CC = player.getParty().getCommandChannel();
  2301. +                           for (L2Party party : CC.getPartys())
  2302. +                           {
  2303. +                               if (party == null)
  2304. +                                   continue;
  2305. +                              
  2306. +                               synchronized (_PlayersInside)
  2307. +                               {
  2308. +                                   for (L2PcInstance member : party.getPartyMembers())
  2309. +                                   {
  2310. +                                       if (member == null || member.getLevel() < MIN_LEVEL)
  2311. +                                           continue;
  2312. +                                       if (!member.isInsideRadius(npc, 700, false, false))
  2313. +                                           continue;
  2314. +                                       if (_PlayersInside.size() > 45)
  2315. +                                       {
  2316. +                                           member.sendMessage("The number of challenges have been full, so can not enter.");
  2317. +                                           break;
  2318. +                                       }
  2319. +                                       _PlayersInside.add(member);
  2320. +                                       FRINTEZZA_LAIR.allowPlayerEntry(member, 300);
  2321. +                                       member.teleToLocation(INVADE_LOC[_LocCycle][0] + Rnd.get(50), INVADE_LOC[_LocCycle][1] + Rnd.get(50), INVADE_LOC[_LocCycle][2], 0);
  2322. +                                   }
  2323. +                                   if (_PlayersInside.size() > 45)
  2324. +                                       break;
  2325. +                               }
  2326. +                               _LocCycle++;
  2327. +                               if (_LocCycle >= 6)
  2328. +                                   _LocCycle = 1;
  2329. +                           }
  2330. +                       }
  2331. +                   }
  2332. +               }
  2333. +               else
  2334. +                   htmltext = "<html><body>Someone else is already inside the Magic Force Field. Try again later.</body></html>";
  2335. +               break;
  2336. +       }
  2337. +      
  2338. +       return htmltext;
  2339. +   }
  2340. +  
  2341. +   @Override
  2342. +   public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isPet)
  2343. +   {
  2344. +       _LastAction = System.currentTimeMillis();
  2345. +       int status = GrandBossManager.getInstance().getBossStatus(FRINTEZZA);
  2346. +      
  2347. +       switch (npc.getNpcId())
  2348. +       {
  2349. +           case FRINTEZZA:
  2350. +               npc.setCurrentHpMp(npc.getMaxHp(), 0);
  2351. +               break;
  2352. +          
  2353. +           case SCARLET1:
  2354. +               if (_SecondMorph == 0 && _ThirdMorph == 0 && _OnMorph == 0 && npc.getCurrentHp() < npc.getMaxHp() * 0.75 && status == FIGHTING)
  2355. +               {
  2356. +                   startQuestTimer("attack_stop", 0, frintezza, null, false);
  2357. +                   _SecondMorph = 1;
  2358. +                   _OnMorph = 1;
  2359. +                   startQuestTimer("stop_pc", 1000, npc, null, false);
  2360. +                   startQuestTimer("stop_npc", 1000, npc, null, false);
  2361. +                   startQuestTimer("morph_01", 1100, npc, null, false);
  2362. +               }
  2363. +               else if (_SecondMorph == 1 && _ThirdMorph == 0 && _OnMorph == 0 && npc.getCurrentHp() < npc.getMaxHp() * 0.5 && status == FIGHTING)
  2364. +               {
  2365. +                   startQuestTimer("attack_stop", 0, frintezza, null, false);
  2366. +                   _ThirdMorph = 1;
  2367. +                   _OnMorph = 1;
  2368. +                   startQuestTimer("stop_pc", 2000, npc, null, false);
  2369. +                   startQuestTimer("stop_npc", 2000, npc, null, false);
  2370. +                   startQuestTimer("morph_05a", 2000, npc, null, false);
  2371. +                   startQuestTimer("morph_05", 2100, npc, null, false);
  2372. +               }
  2373. +               break;
  2374. +          
  2375. +           case SCARLET2:
  2376. +               if (_SecondMorph == 1 && _ThirdMorph == 1 && _OnCheck == 0 && damage >= npc.getCurrentHp() && GrandBossManager.getInstance().getBossStatus(FRINTEZZA) == FIGHTING)
  2377. +                   _OnCheck = 1;
  2378. +                   startQuestTimer("check_hp", 0, npc, null, false);  
  2379. +               break;
  2380. +          
  2381. +           case BREATH_OF_HALISHA:
  2382. +           case BREATH_OF_HALISHA2:
  2383. +               if (_Bomber == 0)
  2384. +               {
  2385. +                   if (npc.getCurrentHp() < npc.getMaxHp() * 0.1)
  2386. +                   {
  2387. +                       if (Rnd.get(100) < 30)
  2388. +                       {
  2389. +                           _Bomber = 1;
  2390. +                           startQuestTimer("bomber", 3000, npc, null, false);                 
  2391. +                           L2Skill skill2 = SkillTable.getInstance().getInfo(BOMBER_GHOST, 1);
  2392. +                           if (skill2 != null)
  2393. +                           {
  2394. +                               npc.doCast(skill2);
  2395. +                           }
  2396. +                       }
  2397. +                   }
  2398. +               }
  2399. +               break;
  2400. +       }
  2401. +       return super.onAttack(npc, attacker, damage, isPet);
  2402. +   }
  2403. +  
  2404. +   @Override
  2405. +   public String onKill(L2Npc npc, L2PcInstance killer, boolean isPet)
  2406. +   {
  2407. +       switch (npc.getNpcId())
  2408. +       {
  2409. +           case SCARLET2:
  2410. +               FRINTEZZA_LAIR.broadcastPacket(new PlaySound(1, "BS01_D", 1, npc.getObjectId(), npc.getX(), npc.getY(), npc.getZ()));
  2411. +               startQuestTimer("stop_pc", 0, null, null, false);
  2412. +               startQuestTimer("stop_npc", 0, npc, null, false);
  2413. +               startQuestTimer("morph_16", 0, npc, null, false);
  2414. +               GrandBossManager.getInstance().setBossStatus(FRINTEZZA, DEAD);
  2415. +               long respawnTime = (long) Config.SPAWN_INTERVAL_FRINTEZZA + Rnd.get(-Config.RANDOM_SPAWN_TIME_FRINTEZZA, Config.RANDOM_SPAWN_TIME_FRINTEZZA);
  2416. +               respawnTime *= 3600000;
  2417. +               cancelQuestTimers("spawn_minion");
  2418. +               cancelQuestTimers("frintezza_despawn");
  2419. +               startQuestTimer("close", 0, null, null, false);
  2420. +               startQuestTimer("rooms_del", 0, npc, null, false);
  2421. +               startQuestTimer("minions_despawn", 0, null, null, false);
  2422. +               startQuestTimer("remove_players", 900000, null, null, false);
  2423. +               startQuestTimer("frintezza_unlock", respawnTime, null, null, false);
  2424. +               StatsSet info = GrandBossManager.getInstance().getStatsSet(FRINTEZZA);
  2425. +               info.set("respawn_time", System.currentTimeMillis() + respawnTime);
  2426. +               GrandBossManager.getInstance().setStatsSet(FRINTEZZA, info);
  2427. +               break;
  2428. +          
  2429. +           case HALL_ALARM_DEVICE:
  2430. +               _KillHallAlarmDevice++;
  2431. +               if (_KillHallAlarmDevice == 3) // open walls reb12
  2432. +               {
  2433. +                   for (int i = 25150051; i <= 25150058; i++)
  2434. +                       DoorTable.getInstance().getDoor(i).openMe();
  2435. +               }
  2436. +               else if (_KillHallAlarmDevice == 4)
  2437. +               {
  2438. +                   startQuestTimer("room1_del", 100, npc, null, false);
  2439. +                   startQuestTimer("room2_spawn", 100, npc, null, false);
  2440. +                   DoorTable.getInstance().getDoor(25150042).openMe();
  2441. +                   DoorTable.getInstance().getDoor(25150043).openMe();
  2442. +               }
  2443. +               break;
  2444. +          
  2445. +           case DARK_CHOIR_PLAYER:
  2446. +               _KillDarkChoirPlayer++;
  2447. +               if (_KillDarkChoirPlayer == 2)
  2448. +               {
  2449. +                   DoorTable.getInstance().getDoor(25150042).closeMe();
  2450. +                   DoorTable.getInstance().getDoor(25150043).closeMe();
  2451. +                   for (int i = 25150061; i <= 25150070; i++)
  2452. +                       DoorTable.getInstance().getDoor(i).openMe();
  2453. +                   startQuestTimer("room2_spawn2", 1000, npc, null, false);
  2454. +               }
  2455. +               break;
  2456. +          
  2457. +           case DARK_CHOIR_CAPTAIN:
  2458. +               _KillDarkChoirCaptain++;
  2459. +               if (_KillDarkChoirCaptain == 8)
  2460. +               {
  2461. +                   startQuestTimer("room2_del", 100, npc, null, false);
  2462. +                   DoorTable.getInstance().getDoor(25150045).openMe();
  2463. +                   DoorTable.getInstance().getDoor(25150046).openMe();
  2464. +                   startQuestTimer("waiting", Config.WAIT_TIME_FRINTEZZA, npc, null, false);
  2465. +                   cancelQuestTimers("room_final");
  2466. +               }
  2467. +               break;
  2468. +       }
  2469. +       return super.onKill(npc, killer, isPet);
  2470. +   }
  2471. +}
  2472. \ No newline at end of file
  2473. Index: config/npcs.properties
  2474. ===================================================================
  2475. --- config/npcs.properties  (revision 5)
  2476. +++ config/npcs.properties  (working copy)
  2477. @@ -194,6 +194,22 @@
  2478.  # Delay of appearance time of Frintezza. Value is minute.
  2479.  FrintezzaWaitTime = 1
  2480.  
  2481. +# Delay of desappear time of Frintezza when inactive. Value is minute.
  2482. +# Default : 15
  2483. +FrintezzaDespawnTime = 5
  2484. +
  2485. +# Time to enter in the last room. Value is minute
  2486. +# Default : 35
  2487. +FrintezzaTimeChallenge = 5
  2488. +
  2489. +# Check Party
  2490. +BypassPartiesCheck = True
  2491. +
  2492. +# Min and Max Party in Frintezza
  2493. +# Default Min = 4 | Max = 5
  2494. +FrintezzaMinParties = 4
  2495. +FrintezzaMaxParties = 5
  2496. +
  2497.  # ------------------------------------------------------------
  2498.  # Orfen
  2499.  # ------------------------------------------------------------
  2500.  
  2501. BossZone.xml
  2502.     <zone id="110011" type="BossZone" shape="Cuboid" minZ="-5140" maxZ="-4000"><!-- Frintezza Boss -->
  2503.         <stat name="InvadeTime" val="1800000" />
  2504.         <node X="172176" Y="-74106" />
  2505.         <node X="176284" Y="-90033" />
  2506.     </zone>
  2507.  
  2508. --- aCis_datapack/data/html/default/32011.htm
  2509. +++ aCis_datapack/data/html/default/32011.htm
  2510. @@ -1,7 +1,7 @@
  2511.  <html><body>
  2512.  I feel an invisible barrier... Some sort of Magic Force Field has been put in place...<br>
  2513.  ...? The guide of the Imperial mausoleum seems to have something to say.<br><br>
  2514. -<a action="bypass -h npc_%objectId%_Quest FinalEmperialTomb">Enter the Magic Force Field</a><br>
  2515. +<a action="bypass -h npc_%objectId%_Quest Frintezza">Enter the Magic Force Field</a><br>
  2516.  <a action="bypass -h npc_%objectId%_Chat 1">Listen to Imperial Tomb Guide</a><br>
  2517.  <a action="bypass -h npc_%objectId%_Quest">Quest</a>
  2518.  </body></html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement