Normils Garden.

Contributed by Gigilo1968.
This commit is contained in:
MobiusDev 2017-02-26 14:06:22 +00:00
parent 5ecaf41431
commit 882e9fb7a0
20 changed files with 1020 additions and 102 deletions

View File

@ -17139,7 +17139,7 @@
<status showHp="false" />
<openStatus default="close" />
</door>
<door id="16200201" name="nornil_cave_S.nornil_mover" isInverted="true">
<door id="16200201" name="nornil_cave_S.nornil_mover" emmiterId="16200202" isInverted="true">
<!-- AUTO GENERATED DOOR -->
<nodes nodeZ="-12616">
<node x="-118879" y="87320" />

View File

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Nornils Garden -->
<instance id="231" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="5" />
<locations>
<enter type="FIXED">
<location x="-111815" y="87877" z="-13008" />
</enter>
<exit type="FIXED">
<location x="-83319" y="50913" z="-4728" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="PartyLeader" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="93" />
<param name="max" value="99" />
</condition>
<condition type="Distance" showMessageAndHtml="true">
<param name="html" value="33781-01.html" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="16200012">
<openStatus default="close"/>
</door>
<door id="16200014">
<openStatus default="open"/>
</door>
<door id="16200015">
<openStatus default="close"/>
</door>
<door id="16200016">
<openStatus default="close"/>
</door>
<door id="16200201">
<openStatus default="close"/>
</door>
</doorlist>
<spawnlist>
<group name="general">
<npc id="19396" x="-120080" y="87176" z="-12608" heading="0" /> <!-- Mother Nornil -->
<npc id="19298" x="-114984" y="87176" z="-12804" heading="0" /> <!-- Boz Generator Stage 1 -->
<npc id="19305" x="-115160" y="86888" z="-12810" heading="24461" /> <!-- Boz Generator Stage 2 -->
<npc id="19305" x="-115160" y="87464" z="-12810" heading="40543" /> <!-- Boz Generator Stage 2 -->
<npc id="19305" x="-115736" y="87464" z="-12810" heading="57343" /> <!-- Boz Generator Stage 2 -->
<npc id="19305" x="-115736" y="86888" z="-12810" heading="8191" /> <!-- Boz Generator Stage 2 -->
<npc id="19403" x="-117352" y="87176" z="-12715" heading="0" /> <!-- Boz Generator Stage 3 -->
<npc id="19305" x="-119544" y="86536" z="-12618" heading="16932" /> <!-- Boz Generator Stage 4 -->
<npc id="19305" x="-119544" y="87816" z="-12618" heading="49151" /> <!-- Boz Generator Stage 4 -->
<npc id="25901" x="-119539" y="87176" z="-12595" heading="0" /> <!-- Spicula Zero -->
</group>
<group name="wave_1" spawnByDefault="false">
<npc id="19300" x="-114875" y="87176" z="-12776" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19301" x="-114865" y="87176" z="-12776" heading="0" /> <!-- Elite Soldier Clone 1 -->
<npc id="19302" x="-114855" y="87176" z="-12776" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19303" x="-114845" y="87176" z="-12776" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19304" x="-114835" y="87176" z="-12776" heading="0" /> <!-- Spicula Elite Guard 2 -->
</group>
<group name="wave_2_1" spawnByDefault="false">
<npc id="19302" x="-115242" y="87176" z="-12784" heading="32767" /> <!-- Spicula Elite Guard 1 -->
<npc id="19303" x="-115307" y="87036" z="-12784" heading="33119" /> <!-- Elite Soldier Clone 2 -->
<npc id="19304" x="-115604" y="86876" z="-12784" heading="49552" /> <!-- Spicula Elite Guard 2 -->
</group>
<group name="wave_2_2" spawnByDefault="false">
<npc id="19300" x="-115449" y="87421" z="-12784" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19303" x="-115449" y="87336" z="-12784" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19302" x="-115447" y="87258" z="-12784" heading="0" /> <!-- Spicula Elite Guard 2 -->
</group>
<group name="wave_2_3" spawnByDefault="false">
<npc id="19301" x="-115701" y="87033" z="-12784" heading="4007" /> <!-- Elite Soldier Clone 1 -->
<npc id="19303" x="-115614" y="86944" z="-12784" heading="6559" /> <!-- Elite Soldier Clone 2 -->
<npc id="19301" x="-115702" y="87176" z="-12784" heading="0" /> <!-- Elite Soldier Clone 1 -->
<npc id="19300" x="-115596" y="87328" z="-12784" heading="54121" /> <!-- Spicula Elite Lieutnant -->
</group>
<group name="wave_2_4" spawnByDefault="false">
<npc id="19301" x="-115601" y="87029" z="-12784" heading="0" /> <!-- Elite Soldier Clone 1 -->
<npc id="19303" x="-115450" y="87372" z="-12784" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19304" x="-115690" y="87181" z="-12784" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19299" x="-115280" y="87344" z="-12784" heading="33432" /> <!-- Spicula Elite Captain -->
</group>
<group name="wave_3" spawnByDefault="false">
<npc id="19302" x="-117108" y="87176" z="-12688" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19302" x="-117343" y="86973" z="-12688" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19302" x="-117550" y="87176" z="-12688" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19302" x="-117343" y="87387" z="-12688" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19299" x="-117192" y="87330" z="-12688" heading="0" /> <!-- Spicula Elite Captain -->
<npc id="19300" x="-117490" y="87325" z="-12688" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19304" x="-117340" y="87270" z="-12688" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19304" x="-117342" y="87075" z="-12688" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19303" x="-117650" y="87176" z="-12688" heading="0" /> <!-- Elite Soldier Clone 2 -->
</group>
<group name="wave_4" spawnByDefault="false">
<npc id="19300" x="-119545" y="87689" z="-12592" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19302" x="-119545" y="87645" z="-12592" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19303" x="-119545" y="87595" z="-12592" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19299" x="-119545" y="86659" z="-12592" heading="0" /> <!-- Spicula Elite Captain -->
<npc id="19302" x="-119545" y="87687" z="-12592" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19304" x="-119545" y="86744" z="-12592" heading="0" /> <!-- Spicula Elite Guard 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,3 @@
<html><body>Boz Core:<br>
This is the Nornil's Garden, in which hosts the Spicula Zero
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Boz Core:<br>
This is the central device that manages the Spicula Clone Generator. It seems connected to Nornil's Garden, home to Spicula Zero is.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest NornilsGarden enterInstance">Go to Nornil's Garden.</Button><br>
(It is recommended to go to Nornil's Garden as a group of 7.)
</body></html>

View File

@ -0,0 +1,314 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.NornilsGarden;
import com.l2jmobius.commons.util.CommonUtil;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.actor.L2Attackable;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import instances.AbstractInstance;
/**
* Nornils Garden Instance
* @URL https://l2wiki.com/Nornils_Garden
* @Video https://www.youtube.com/watch?v=6QKzzmJ5GUs
* @author Gigi
* @date 2017-02-22 - [15:22:27]
*/
public class NornilsGarden extends AbstractInstance
{
// NPCs
private static final int BOZ_CORE = 33781;
private static final int SPICULA_ZERO = 25901;
// Monsters
private final static int BOZ_STAGE1 = 19298;
private final static int BOZ_STAGE2 = 19305;
private final static int BOZ_STAGE3 = 19403;
private final static int BOZ_STAGE4 = BOZ_STAGE2;
private final static int SPICULA_ELITE_CAPTAIN = 19299;
private final static int SPICULA_ELITE_LIEUTNANT = 19300;
private final static int ELITE_SOLDIER_CLONE_1 = 19301;
private final static int SPICULA_ELITE_GUARD_1 = 19302;
private final static int ELITE_SOLDIER_CLONE_2 = 19303;
private final static int SPICULA_ELITE_GUARD_2 = 19304;
private static final int[] ATTACABLE_MONSTERS =
{
SPICULA_ELITE_CAPTAIN,
SPICULA_ELITE_CAPTAIN,
SPICULA_ELITE_LIEUTNANT,
ELITE_SOLDIER_CLONE_1,
SPICULA_ELITE_GUARD_1,
ELITE_SOLDIER_CLONE_2,
SPICULA_ELITE_GUARD_2
};
// Skills
private static final SkillHolder DARK_SPHERES = new SkillHolder(15234, 1);
private static final SkillHolder DARK_WIND = new SkillHolder(15235, 1);
private static final SkillHolder DARK_THRUST = new SkillHolder(15236, 1);
private static final SkillHolder DARK_BUSTER = new SkillHolder(15237, 1);
private static final SkillHolder DARK_BREATH = new SkillHolder(15238, 1);
// Chance
private final static int CHANCE_DARK_SPHERES = 15;
private final static int CHANCE_DARK_WIND = 30;
private final static int CHANCE_DARK_THRUST = 15;
private final static int CHANCE_DARK_BUSTER = 15;
private final static int CHANCE_DARK_BREATH = 30;
// Misc
private static final int TEMPLATE_ID = 231;
public NornilsGarden()
{
super(TEMPLATE_ID);
addStartNpc(BOZ_CORE);
addTalkId(BOZ_CORE);
addFirstTalkId(BOZ_CORE);
addAttackId(SPICULA_ZERO);
addKillId(ATTACABLE_MONSTERS);
addKillId(SPICULA_ZERO);
addKillId(BOZ_STAGE1, BOZ_STAGE2, BOZ_STAGE3, BOZ_STAGE4);
addSeeCreatureId(BOZ_STAGE1);
addSpawnId(ATTACABLE_MONSTERS);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final Instance world = npc.getInstanceWorld();
if (isInInstance(world))
{
switch (event)
{
case "stage1":
{
world.spawnGroup("wave_1");
startQuestTimer("stage1_1", 20000, npc, null, true);
break;
}
case "stage1_1":
{
if (!npc.isDead() && world.getAliveNpcs(ATTACABLE_MONSTERS).isEmpty())
{
world.spawnGroup("wave_1");
npc.setTargetable(true);
}
break;
}
case "stage2":
{
if (world.isStatus(5) && world.getAliveNpcs(ATTACABLE_MONSTERS).isEmpty())
{
world.openCloseDoor(16200016, true);
cancelQuestTimers("stage2");
world.spawnGroup("wave_3");
}
break;
}
case "stage3":
{
if (world.isStatus(6) && world.getAliveNpcs(ATTACABLE_MONSTERS).isEmpty())
{
world.openCloseDoor(16200201, true);
cancelQuestTimers("stage3");
cancelQuestTimers("check_agrro");
}
break;
}
case "check_agrro":
{
if ((world != null) && !npc.isDead() && !npc.isInCombat())
{
L2World.getInstance().forEachVisibleObjectInRange(npc, L2PcInstance.class, 1500, knownChar ->
{
if (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId()) && !npc.isInCombat())
{
npc.setRunning();
((L2Attackable) npc).addDamageHate(knownChar, 0, 99999);
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, knownChar);
}
});
}
break;
}
}
}
else if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
{
final Instance world = npc.getInstanceWorld();
if (isInInstance(world))
{
world.openCloseDoor(16200201, false);
}
if ((attacker != null) && !attacker.isDead() && !npc.isCastingNow())
{
if ((getRandom(100) < CHANCE_DARK_SPHERES) && (npc.getCurrentHpPercent() <= 95))
{
npc.setTarget(attacker);
npc.doCast(DARK_SPHERES.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_WIND) && (npc.getCurrentHpPercent() <= 75))
{
npc.setTarget(attacker);
npc.doCast(DARK_WIND.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_THRUST) && (npc.getCurrentHpPercent() <= 50))
{
npc.setTarget(attacker);
npc.doCast(DARK_THRUST.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_BUSTER) && (npc.getCurrentHpPercent() <= 25))
{
npc.setTarget(attacker);
npc.doCast(DARK_BUSTER.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_BREATH) && (npc.getCurrentHpPercent() <= 10))
{
npc.setTarget(attacker);
npc.doCast(DARK_BREATH.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final Instance world = npc.getInstanceWorld();
switch (world.getStatus())
{
case 0:
{
if (npc.getId() == BOZ_STAGE1)
{
cancelQuestTimers("stage1_1");
world.openCloseDoor(16200015, true);
world.setStatus(1);
}
break;
}
case 1:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 6))
{
world.spawnGroup("wave_2_1");
world.setStatus(2);
}
break;
}
case 2:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 5))
{
world.spawnGroup("wave_2_2");
world.setStatus(3);
}
break;
}
case 3:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 4))
{
world.spawnGroup("wave_2_3");
world.setStatus(4);
}
break;
}
case 4:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 3))
{
world.spawnGroup("wave_2_4");
startQuestTimer("stage2", 15000, npc, null, true);
world.setStatus(5);
}
break;
}
case 5:
{
if (npc.getId() == BOZ_STAGE3)
{
startQuestTimer("stage3", 10000, npc, null, true);
world.setStatus(6);
}
break;
}
case 6:
{
if (npc.getId() == SPICULA_ZERO)
{
world.getAliveNpcs(BOZ_STAGE4).forEach(boz -> boz.doDie(null));
world.spawnGroup("wave_4");
world.finishInstance();
world.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_DUNGEON_WILL_EXPIRE_IN_S1_MINUTE_S_YOU_WILL_BE_FORCED_OUT_OF_THE_DUNGEON_WHEN_THE_TIME_EXPIRES).addInt((int) 5.0D));
}
break;
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return "33781.html";
}
@Override
public String onSeeCreature(L2Npc npc, L2Character creature, boolean isSummon)
{
if ((npc.getId() == BOZ_STAGE1) && creature.isPlayable() && npc.isScriptValue(0))
{
startQuestTimer("stage1", 3000, npc, null);
npc.setTargetable(false);
npc.setScriptValue(1);
}
return super.onSeeCreature(npc, creature, isSummon);
}
@Override
public String onSpawn(L2Npc npc)
{
final Instance world = npc.getInstanceWorld();
if (isInInstance(world) && (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId())))
{
((L2Attackable) npc).setCanStopAttackByTime(false);
((L2Attackable) npc).setCanReturnToSpawnPoint(false);
startQuestTimer("check_agrro", 1000, npc, null, true);
}
return super.onSpawn(npc);
}
public static void main(String[] args)
{
new NornilsGarden();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Boz Core:<br>
Aren't you in a party? But you are not the party leader.<br>
(Only the party leader can request to enter.)
</body></html>

View File

@ -3583,7 +3583,7 @@
</attribute>
<abnormalResist physical="0" magical="0" />
</stats>
<status attackable="false" undying="false" />
<status attackable="false" undying="false" canMove="false" />
<ai aggroRange="300" isAggressive="true" clanHelpRange="600">
<clan_list>
<clan>NORNIL_METUCELLAR</clan>

View File

@ -245,7 +245,7 @@
</attribute>
<abnormalResist physical="0" magical="0" />
</stats>
<status attackable="false" undying="false" />
<status attackable="false" undying="false" canMove="false" />
<skill_list>
<skill id="4416" level="2" /> <!-- Magic Creatures -->
<skill id="4390" level="1" /> <!-- NPC Abnormal Immunity -->

View File

@ -147,7 +147,7 @@
</attribute>
<abnormalResist physical="0" magical="0" />
</stats>
<status attackable="false" />
<status attackable="false" canMove="false" />
<skill_list>
<skill id="4416" level="2" /> <!-- Magic Creatures -->
<skill id="4415" level="3" /> <!-- One-handed Sword -->

View File

@ -32,13 +32,6 @@
</collision>
</npc>
<npc id="25901" level="96" type="L2RaidBoss" name="Spicula Zero" title="Raid Boss">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Skill01_ID" id="15238" level="1" />
<skill name="Skill02_ID" id="15236" level="1" />
<skill name="Skill03_ID" id="15237" level="1" />
<skill name="Skill04_ID" id="15235" level="1" />
</parameters>
<race>HUMANOID</race>
<sex>MALE</sex>
<acquire exp="2109284352" sp="506228" raidPoints="7" />
@ -74,46 +67,64 @@
</ai>
<drop_lists>
<death>
<group chance="2.555">
<item id="35450" min="1" max="1" chance="41.291585127202" /> <!-- Recipe: Seraph Ring (60%) -->
<item id="35448" min="1" max="1" chance="29.354207436399" /> <!-- Recipe: Seraph Necklace (60%) -->
<item id="35449" min="1" max="1" chance="29.354207436399" /> <!-- Recipe: Seraph Earring (60%) -->
</group>
<group chance="44.93">
<item id="17527" min="1" max="3" chance="36.056087246828" /> <!-- Scroll: Enchant Armor (R-grade) -->
<item id="17526" min="1" max="1" chance="5.6821722679724" /> <!-- Scroll: Enchant Weapon (R-grade) -->
<item id="35446" min="1" max="1" chance="3.3563320721122" /> <!-- Recipe: Seraph Shoes (60%) -->
<item id="35436" min="1" max="1" chance="3.3385265969286" /> <!-- Recipe: Seraph Shield (60%) -->
<item id="35434" min="1" max="1" chance="3.316269752949" /> <!-- Recipe: Seraph Gauntlets (60%) -->
<item id="35441" min="1" max="1" chance="3.2851101713777" /> <!-- Recipe: Seraph Leather Boots (60%) -->
<item id="35440" min="1" max="1" chance="3.2517249054084" /> <!-- Recipe: Seraph Leather Gloves (60%) -->
<item id="35445" min="1" max="1" chance="3.1382150011128" /> <!-- Recipe: Seraph Gloves (60%) -->
<item id="35447" min="1" max="1" chance="3.1048297351436" /> <!-- Recipe: Seraph Sigil (60%) -->
<item id="35435" min="1" max="1" chance="3.0870242599599" /> <!-- Recipe: Seraph Boots (60%) -->
<item id="35426" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Thrower (60%) -->
<item id="35433" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Gaiters (60%) -->
<item id="35439" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Leather Leggings (60%) -->
<item id="35421" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Cutter (60%) -->
<item id="35420" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Shaper (60%) -->
<item id="35442" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Circlet (60%) -->
<item id="35444" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Stockings (60%) -->
<item id="35437" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Leather Helmet (60%) -->
<item id="35422" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Slasher (60%) -->
<item id="35423" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Avenger (60%) -->
<item id="35427" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Shooter (60%) -->
<item id="35428" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Buster (60%) -->
<item id="35429" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Caster (60%) -->
<item id="35430" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Retributer (60%) -->
<item id="35431" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Helmet (60%) -->
<item id="35425" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Stormer (60%) -->
<item id="35424" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Fighter (60%) -->
<item id="35443" min="1" max="1" chance="0.66770531938571" /> <!-- Recipe: Seraph Tunic (60%) -->
<item id="35432" min="1" max="1" chance="0.66770531938571" /> <!-- Recipe: Seraph Breastplate (60%) -->
<item id="19513" min="1" max="1" chance="0.66770531938571" /> <!-- Purple Soul Crystal Fragment (R95-grade) -->
<item id="19512" min="1" max="1" chance="0.66770531938571" /> <!-- Teal Soul Crystal Fragment (R95-grade) -->
<item id="19511" min="1" max="1" chance="0.66770531938571" /> <!-- Yellow Soul Crystal Fragment (R95-grade) -->
<item id="35438" min="1" max="1" chance="0.66770531938571" /> <!-- Recipe: Seraph Leather Armor (60%) -->
</group>
<item id="17527" min="1" max="3" chance="17.37" /> <!-- Scroll: Enchant Armor (R-grade) -->
<item id="17526" min="1" max="1" chance="2.64" /> <!-- Scroll: Enchant Weapon (R-grade) -->
<item id="35435" min="1" max="1" chance="1.502" /> <!-- Recipe: Seraph Boots (60%) -->
<item id="35440" min="1" max="1" chance="1.472" /> <!-- Recipe: Seraph Leather Gloves (60%) -->
<item id="35445" min="1" max="1" chance="1.46" /> <!-- Recipe: Seraph Gloves (60%) -->
<item id="35436" min="1" max="1" chance="1.433" /> <!-- Recipe: Seraph Shield (60%) -->
<item id="35441" min="1" max="1" chance="1.421" /> <!-- Recipe: Seraph Leather Boots (60%) -->
<item id="35434" min="1" max="1" chance="1.417" /> <!-- Recipe: Seraph Gauntlets (60%) -->
<item id="35446" min="1" max="1" chance="1.412" /> <!-- Recipe: Seraph Shoes (60%) -->
<item id="35447" min="1" max="1" chance="1.406" /> <!-- Recipe: Seraph Sigil (60%) -->
<item id="35450" min="1" max="1" chance="1.082" /> <!-- Recipe: Seraph Ring (60%) -->
<item id="35437" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Leather Helmet (60%) -->
<item id="35449" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Earring (60%) -->
<item id="35439" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Leather Leggings (60%) -->
<item id="35442" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Circlet (60%) -->
<item id="35425" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Stormer (60%) -->
<item id="35448" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Necklace (60%) -->
<item id="35444" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Stockings (60%) -->
<item id="35433" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Gaiters (60%) -->
<item id="35420" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Shaper (60%) -->
<item id="35421" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Cutter (60%) -->
<item id="35422" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Slasher (60%) -->
<item id="35423" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Avenger (60%) -->
<item id="35424" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Fighter (60%) -->
<item id="35426" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Thrower (60%) -->
<item id="35427" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Shooter (60%) -->
<item id="35428" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Buster (60%) -->
<item id="35429" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Caster (60%) -->
<item id="35430" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Retributer (60%) -->
<item id="35431" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Helmet (60%) -->
<item id="35443" min="1" max="1" chance="0.3" /> <!-- Recipe: Seraph Tunic (60%) -->
<item id="35432" min="1" max="1" chance="0.3" /> <!-- Recipe: Seraph Breastplate (60%) -->
<item id="35438" min="1" max="1" chance="0.3" /> <!-- Recipe: Seraph Leather Armor (60%) -->
<item id="46475" min="1" max="1" chance="0.075" /> <!-- Leona's Soul Crystal - Stage 2 -->
<item id="46476" min="1" max="1" chance="0.075" /> <!-- Leona's Soul Crystal - Stage 3 -->
<item id="46489" min="1" max="1" chance="0.075" /> <!-- Pantheon's Soul Crystal - Stage 1 -->
<item id="46490" min="1" max="1" chance="0.075" /> <!-- Pantheon's Soul Crystal - Stage 2 -->
<item id="46491" min="1" max="1" chance="0.075" /> <!-- Pantheon's Soul Crystal - Stage 3 -->
<item id="46504" min="1" max="1" chance="0.075" /> <!-- Lionel's Soul Crystal - Stage 1 -->
<item id="46505" min="1" max="1" chance="0.075" /> <!-- Lionel's Soul Crystal - Stage 2 -->
<item id="46506" min="1" max="1" chance="0.075" /> <!-- Lionel's Soul Crystal - Stage 3 -->
<item id="46474" min="1" max="1" chance="0.075" /> <!-- Leona's Soul Crystal - Stage 1 -->
<item id="46444" min="1" max="1" chance="0.075" /> <!-- Kain's Soul Crystal - Stage 1 -->
<item id="46459" min="1" max="1" chance="0.075" /> <!-- Mermoden's Soul Crystal - Stage 1 -->
<item id="46508" min="1" max="1" chance="0.03" /> <!-- Lionel's Soul Crystal - Stage 5 -->
<item id="46507" min="1" max="1" chance="0.03" /> <!-- Lionel's Soul Crystal - Stage 4 -->
<item id="46445" min="1" max="1" chance="0.03" /> <!-- Kain's Soul Crystal - Stage 2 -->
<item id="46446" min="1" max="1" chance="0.03" /> <!-- Kain's Soul Crystal - Stage 3 -->
<item id="46493" min="1" max="1" chance="0.03" /> <!-- Pantheon's Soul Crystal - Stage 5 -->
<item id="46492" min="1" max="1" chance="0.03" /> <!-- Pantheon's Soul Crystal - Stage 4 -->
<item id="46447" min="1" max="1" chance="0.03" /> <!-- Kain's Soul Crystal - Stage 4 -->
<item id="46478" min="1" max="1" chance="0.03" /> <!-- Leona's Soul Crystal - Stage 5 -->
<item id="46477" min="1" max="1" chance="0.03" /> <!-- Leona's Soul Crystal - Stage 4 -->
<item id="46460" min="1" max="1" chance="0.03" /> <!-- Mermoden's Soul Crystal - Stage 2 -->
<item id="46461" min="1" max="1" chance="0.03" /> <!-- Mermoden's Soul Crystal - Stage 3 -->
<item id="46462" min="1" max="1" chance="0.03" /> <!-- Mermoden's Soul Crystal - Stage 4 -->
<item id="46448" min="1" max="1" chance="0.0075" /> <!-- Kain's Soul Crystal - Stage 5 -->
<item id="46463" min="1" max="1" chance="0.0075" /> <!-- Mermoden's Soul Crystal - Stage 5 -->
</death>
<lucky_corpse>
<item id="39629" min="2" max="2" chance="100" /> <!-- Fortune Pocket - Stage 1 -->

View File

@ -17139,7 +17139,7 @@
<status showHp="false" />
<openStatus default="close" />
</door>
<door id="16200201" name="nornil_cave_S.nornil_mover" isInverted="true">
<door id="16200201" name="nornil_cave_S.nornil_mover" emmiterId="16200202" isInverted="true">
<!-- AUTO GENERATED DOOR -->
<nodes nodeZ="-12616">
<node x="-118879" y="87320" />

View File

@ -0,0 +1,122 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Nornils Garden -->
<instance id="231" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../xsd/instance.xsd">
<time duration="60" empty="5" />
<locations>
<enter type="FIXED">
<location x="-111815" y="87877" z="-13008" />
</enter>
<exit type="FIXED">
<location x="-83319" y="50913" z="-4728" />
</exit>
</locations>
<conditions>
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="PartyLeader" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html" />
</condition>
<condition type="GroupMin">
<param name="limit" value="2" />
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />
</condition>
<condition type="Level">
<param name="min" value="93" />
<param name="max" value="99" />
</condition>
<condition type="Distance" showMessageAndHtml="true">
<param name="html" value="33781-01.html" />
</condition>
</conditions>
<reenter apply="ON_FINISH">
<reset day="MONDAY" hour="6" minute="30" />
<reset day="TUESDAY" hour="6" minute="30" />
<reset day="WEDNESDAY" hour="6" minute="30" />
<reset day="THURSDAY" hour="6" minute="30" />
<reset day="FRIDAY" hour="6" minute="30" />
<reset day="SATURDAY" hour="6" minute="30" />
<reset day="SUNDAY" hour="6" minute="30" />
</reenter>
<doorlist>
<door id="16200012">
<openStatus default="close"/>
</door>
<door id="16200014">
<openStatus default="open"/>
</door>
<door id="16200015">
<openStatus default="close"/>
</door>
<door id="16200016">
<openStatus default="close"/>
</door>
<door id="16200201">
<openStatus default="close"/>
</door>
</doorlist>
<spawnlist>
<group name="general">
<npc id="19396" x="-120080" y="87176" z="-12608" heading="0" /> <!-- Mother Nornil -->
<npc id="19298" x="-114984" y="87176" z="-12804" heading="0" /> <!-- Boz Generator Stage 1 -->
<npc id="19305" x="-115160" y="86888" z="-12810" heading="24461" /> <!-- Boz Generator Stage 2 -->
<npc id="19305" x="-115160" y="87464" z="-12810" heading="40543" /> <!-- Boz Generator Stage 2 -->
<npc id="19305" x="-115736" y="87464" z="-12810" heading="57343" /> <!-- Boz Generator Stage 2 -->
<npc id="19305" x="-115736" y="86888" z="-12810" heading="8191" /> <!-- Boz Generator Stage 2 -->
<npc id="19403" x="-117352" y="87176" z="-12715" heading="0" /> <!-- Boz Generator Stage 3 -->
<npc id="19305" x="-119544" y="86536" z="-12618" heading="16932" /> <!-- Boz Generator Stage 4 -->
<npc id="19305" x="-119544" y="87816" z="-12618" heading="49151" /> <!-- Boz Generator Stage 4 -->
<npc id="25901" x="-119539" y="87176" z="-12595" heading="0" /> <!-- Spicula Zero -->
</group>
<group name="wave_1" spawnByDefault="false">
<npc id="19300" x="-114875" y="87176" z="-12776" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19301" x="-114865" y="87176" z="-12776" heading="0" /> <!-- Elite Soldier Clone 1 -->
<npc id="19302" x="-114855" y="87176" z="-12776" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19303" x="-114845" y="87176" z="-12776" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19304" x="-114835" y="87176" z="-12776" heading="0" /> <!-- Spicula Elite Guard 2 -->
</group>
<group name="wave_2_1" spawnByDefault="false">
<npc id="19302" x="-115242" y="87176" z="-12784" heading="32767" /> <!-- Spicula Elite Guard 1 -->
<npc id="19303" x="-115307" y="87036" z="-12784" heading="33119" /> <!-- Elite Soldier Clone 2 -->
<npc id="19304" x="-115604" y="86876" z="-12784" heading="49552" /> <!-- Spicula Elite Guard 2 -->
</group>
<group name="wave_2_2" spawnByDefault="false">
<npc id="19300" x="-115449" y="87421" z="-12784" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19303" x="-115449" y="87336" z="-12784" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19302" x="-115447" y="87258" z="-12784" heading="0" /> <!-- Spicula Elite Guard 2 -->
</group>
<group name="wave_2_3" spawnByDefault="false">
<npc id="19301" x="-115701" y="87033" z="-12784" heading="4007" /> <!-- Elite Soldier Clone 1 -->
<npc id="19303" x="-115614" y="86944" z="-12784" heading="6559" /> <!-- Elite Soldier Clone 2 -->
<npc id="19301" x="-115702" y="87176" z="-12784" heading="0" /> <!-- Elite Soldier Clone 1 -->
<npc id="19300" x="-115596" y="87328" z="-12784" heading="54121" /> <!-- Spicula Elite Lieutnant -->
</group>
<group name="wave_2_4" spawnByDefault="false">
<npc id="19301" x="-115601" y="87029" z="-12784" heading="0" /> <!-- Elite Soldier Clone 1 -->
<npc id="19303" x="-115450" y="87372" z="-12784" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19304" x="-115690" y="87181" z="-12784" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19299" x="-115280" y="87344" z="-12784" heading="33432" /> <!-- Spicula Elite Captain -->
</group>
<group name="wave_3" spawnByDefault="false">
<npc id="19302" x="-117108" y="87176" z="-12688" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19302" x="-117343" y="86973" z="-12688" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19302" x="-117550" y="87176" z="-12688" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19302" x="-117343" y="87387" z="-12688" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19299" x="-117192" y="87330" z="-12688" heading="0" /> <!-- Spicula Elite Captain -->
<npc id="19300" x="-117490" y="87325" z="-12688" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19304" x="-117340" y="87270" z="-12688" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19304" x="-117342" y="87075" z="-12688" heading="0" /> <!-- Spicula Elite Guard 2 -->
<npc id="19303" x="-117650" y="87176" z="-12688" heading="0" /> <!-- Elite Soldier Clone 2 -->
</group>
<group name="wave_4" spawnByDefault="false">
<npc id="19300" x="-119545" y="87689" z="-12592" heading="0" /> <!-- Spicula Elite Lieutnant -->
<npc id="19302" x="-119545" y="87645" z="-12592" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19303" x="-119545" y="87595" z="-12592" heading="0" /> <!-- Elite Soldier Clone 2 -->
<npc id="19299" x="-119545" y="86659" z="-12592" heading="0" /> <!-- Spicula Elite Captain -->
<npc id="19302" x="-119545" y="87687" z="-12592" heading="0" /> <!-- Spicula Elite Guard 1 -->
<npc id="19304" x="-119545" y="86744" z="-12592" heading="0" /> <!-- Spicula Elite Guard 2 -->
</group>
</spawnlist>
</instance>

View File

@ -0,0 +1,3 @@
<html><body>Boz Core:<br>
This is the Nornil's Garden, in which hosts the Spicula Zero
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Boz Core:<br>
This is the central device that manages the Spicula Clone Generator. It seems connected to Nornil's Garden, home to Spicula Zero is.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest NornilsGarden enterInstance">Go to Nornil's Garden.</Button><br>
(It is recommended to go to Nornil's Garden as a group of 7.)
</body></html>

View File

@ -0,0 +1,314 @@
/*
* This file is part of the L2J Mobius project.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package instances.NornilsGarden;
import com.l2jmobius.commons.util.CommonUtil;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.model.L2World;
import com.l2jmobius.gameserver.model.actor.L2Attackable;
import com.l2jmobius.gameserver.model.actor.L2Character;
import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.holders.SkillHolder;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.network.SystemMessageId;
import com.l2jmobius.gameserver.network.serverpackets.SystemMessage;
import instances.AbstractInstance;
/**
* Nornils Garden Instance
* @URL https://l2wiki.com/Nornils_Garden
* @Video https://www.youtube.com/watch?v=6QKzzmJ5GUs
* @author Gigi
* @date 2017-02-22 - [15:22:27]
*/
public class NornilsGarden extends AbstractInstance
{
// NPCs
private static final int BOZ_CORE = 33781;
private static final int SPICULA_ZERO = 25901;
// Monsters
private final static int BOZ_STAGE1 = 19298;
private final static int BOZ_STAGE2 = 19305;
private final static int BOZ_STAGE3 = 19403;
private final static int BOZ_STAGE4 = BOZ_STAGE2;
private final static int SPICULA_ELITE_CAPTAIN = 19299;
private final static int SPICULA_ELITE_LIEUTNANT = 19300;
private final static int ELITE_SOLDIER_CLONE_1 = 19301;
private final static int SPICULA_ELITE_GUARD_1 = 19302;
private final static int ELITE_SOLDIER_CLONE_2 = 19303;
private final static int SPICULA_ELITE_GUARD_2 = 19304;
private static final int[] ATTACABLE_MONSTERS =
{
SPICULA_ELITE_CAPTAIN,
SPICULA_ELITE_CAPTAIN,
SPICULA_ELITE_LIEUTNANT,
ELITE_SOLDIER_CLONE_1,
SPICULA_ELITE_GUARD_1,
ELITE_SOLDIER_CLONE_2,
SPICULA_ELITE_GUARD_2
};
// Skills
private static final SkillHolder DARK_SPHERES = new SkillHolder(15234, 1);
private static final SkillHolder DARK_WIND = new SkillHolder(15235, 1);
private static final SkillHolder DARK_THRUST = new SkillHolder(15236, 1);
private static final SkillHolder DARK_BUSTER = new SkillHolder(15237, 1);
private static final SkillHolder DARK_BREATH = new SkillHolder(15238, 1);
// Chance
private final static int CHANCE_DARK_SPHERES = 15;
private final static int CHANCE_DARK_WIND = 30;
private final static int CHANCE_DARK_THRUST = 15;
private final static int CHANCE_DARK_BUSTER = 15;
private final static int CHANCE_DARK_BREATH = 30;
// Misc
private static final int TEMPLATE_ID = 231;
public NornilsGarden()
{
super(TEMPLATE_ID);
addStartNpc(BOZ_CORE);
addTalkId(BOZ_CORE);
addFirstTalkId(BOZ_CORE);
addAttackId(SPICULA_ZERO);
addKillId(ATTACABLE_MONSTERS);
addKillId(SPICULA_ZERO);
addKillId(BOZ_STAGE1, BOZ_STAGE2, BOZ_STAGE3, BOZ_STAGE4);
addSeeCreatureId(BOZ_STAGE1);
addSpawnId(ATTACABLE_MONSTERS);
}
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
final Instance world = npc.getInstanceWorld();
if (isInInstance(world))
{
switch (event)
{
case "stage1":
{
world.spawnGroup("wave_1");
startQuestTimer("stage1_1", 20000, npc, null, true);
break;
}
case "stage1_1":
{
if (!npc.isDead() && world.getAliveNpcs(ATTACABLE_MONSTERS).isEmpty())
{
world.spawnGroup("wave_1");
npc.setTargetable(true);
}
break;
}
case "stage2":
{
if (world.isStatus(5) && world.getAliveNpcs(ATTACABLE_MONSTERS).isEmpty())
{
world.openCloseDoor(16200016, true);
cancelQuestTimers("stage2");
world.spawnGroup("wave_3");
}
break;
}
case "stage3":
{
if (world.isStatus(6) && world.getAliveNpcs(ATTACABLE_MONSTERS).isEmpty())
{
world.openCloseDoor(16200201, true);
cancelQuestTimers("stage3");
cancelQuestTimers("check_agrro");
}
break;
}
case "check_agrro":
{
if ((world != null) && !npc.isDead() && !npc.isInCombat())
{
L2World.getInstance().forEachVisibleObjectInRange(npc, L2PcInstance.class, 1500, knownChar ->
{
if (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId()) && !npc.isInCombat())
{
npc.setRunning();
((L2Attackable) npc).addDamageHate(knownChar, 0, 99999);
npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, knownChar);
}
});
}
break;
}
}
}
else if (event.equals("enterInstance"))
{
enterInstance(player, npc, TEMPLATE_ID);
}
return super.onAdvEvent(event, npc, player);
}
@Override
public String onAttack(L2Npc npc, L2PcInstance attacker, int damage, boolean isSummon)
{
final Instance world = npc.getInstanceWorld();
if (isInInstance(world))
{
world.openCloseDoor(16200201, false);
}
if ((attacker != null) && !attacker.isDead() && !npc.isCastingNow())
{
if ((getRandom(100) < CHANCE_DARK_SPHERES) && (npc.getCurrentHpPercent() <= 95))
{
npc.setTarget(attacker);
npc.doCast(DARK_SPHERES.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_WIND) && (npc.getCurrentHpPercent() <= 75))
{
npc.setTarget(attacker);
npc.doCast(DARK_WIND.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_THRUST) && (npc.getCurrentHpPercent() <= 50))
{
npc.setTarget(attacker);
npc.doCast(DARK_THRUST.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_BUSTER) && (npc.getCurrentHpPercent() <= 25))
{
npc.setTarget(attacker);
npc.doCast(DARK_BUSTER.getSkill());
}
else if ((getRandom(100) < CHANCE_DARK_BREATH) && (npc.getCurrentHpPercent() <= 10))
{
npc.setTarget(attacker);
npc.doCast(DARK_BREATH.getSkill());
}
}
return super.onAttack(npc, attacker, damage, isSummon);
}
@Override
public String onKill(L2Npc npc, L2PcInstance killer, boolean isSummon)
{
final Instance world = npc.getInstanceWorld();
switch (world.getStatus())
{
case 0:
{
if (npc.getId() == BOZ_STAGE1)
{
cancelQuestTimers("stage1_1");
world.openCloseDoor(16200015, true);
world.setStatus(1);
}
break;
}
case 1:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 6))
{
world.spawnGroup("wave_2_1");
world.setStatus(2);
}
break;
}
case 2:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 5))
{
world.spawnGroup("wave_2_2");
world.setStatus(3);
}
break;
}
case 3:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 4))
{
world.spawnGroup("wave_2_3");
world.setStatus(4);
}
break;
}
case 4:
{
if ((npc.getId() == BOZ_STAGE2) && (world.getAliveNpcs(BOZ_STAGE2).size() < 3))
{
world.spawnGroup("wave_2_4");
startQuestTimer("stage2", 15000, npc, null, true);
world.setStatus(5);
}
break;
}
case 5:
{
if (npc.getId() == BOZ_STAGE3)
{
startQuestTimer("stage3", 10000, npc, null, true);
world.setStatus(6);
}
break;
}
case 6:
{
if (npc.getId() == SPICULA_ZERO)
{
world.getAliveNpcs(BOZ_STAGE4).forEach(boz -> boz.doDie(null));
world.spawnGroup("wave_4");
world.finishInstance();
world.broadcastPacket(SystemMessage.getSystemMessage(SystemMessageId.THIS_DUNGEON_WILL_EXPIRE_IN_S1_MINUTE_S_YOU_WILL_BE_FORCED_OUT_OF_THE_DUNGEON_WHEN_THE_TIME_EXPIRES).addInt((int) 5.0D));
}
break;
}
}
return super.onKill(npc, killer, isSummon);
}
@Override
public String onFirstTalk(L2Npc npc, L2PcInstance player)
{
return "33781.html";
}
@Override
public String onSeeCreature(L2Npc npc, L2Character creature, boolean isSummon)
{
if ((npc.getId() == BOZ_STAGE1) && creature.isPlayable() && npc.isScriptValue(0))
{
startQuestTimer("stage1", 3000, npc, null);
npc.setTargetable(false);
npc.setScriptValue(1);
}
return super.onSeeCreature(npc, creature, isSummon);
}
@Override
public String onSpawn(L2Npc npc)
{
final Instance world = npc.getInstanceWorld();
if (isInInstance(world) && (CommonUtil.contains(ATTACABLE_MONSTERS, npc.getId())))
{
((L2Attackable) npc).setCanStopAttackByTime(false);
((L2Attackable) npc).setCanReturnToSpawnPoint(false);
startQuestTimer("check_agrro", 1000, npc, null, true);
}
return super.onSpawn(npc);
}
public static void main(String[] args)
{
new NornilsGarden();
}
}

View File

@ -0,0 +1,4 @@
<html><body>Boz Core:<br>
Aren't you in a party? But you are not the party leader.<br>
(Only the party leader can request to enter.)
</body></html>

View File

@ -3583,7 +3583,7 @@
</attribute>
<abnormalResist physical="0" magical="0" />
</stats>
<status attackable="false" undying="false" />
<status attackable="false" undying="false" canMove="false" />
<ai aggroRange="300" isAggressive="true" clanHelpRange="600">
<clan_list>
<clan>NORNIL_METUCELLAR</clan>

View File

@ -245,7 +245,7 @@
</attribute>
<abnormalResist physical="0" magical="0" />
</stats>
<status attackable="false" undying="false" />
<status attackable="false" undying="false" canMove="false" />
<skill_list>
<skill id="4416" level="2" /> <!-- Magic Creatures -->
<skill id="4390" level="1" /> <!-- NPC Abnormal Immunity -->

View File

@ -147,7 +147,7 @@
</attribute>
<abnormalResist physical="0" magical="0" />
</stats>
<status attackable="false" />
<status attackable="false" canMove="false" />
<skill_list>
<skill id="4416" level="2" /> <!-- Magic Creatures -->
<skill id="4415" level="3" /> <!-- One-handed Sword -->

View File

@ -32,13 +32,6 @@
</collision>
</npc>
<npc id="25901" level="96" type="L2RaidBoss" name="Spicula Zero" title="Raid Boss">
<!-- AUTO GENERATED NPC TODO: FIX IT -->
<parameters>
<skill name="Skill01_ID" id="15238" level="1" />
<skill name="Skill02_ID" id="15236" level="1" />
<skill name="Skill03_ID" id="15237" level="1" />
<skill name="Skill04_ID" id="15235" level="1" />
</parameters>
<race>HUMANOID</race>
<sex>MALE</sex>
<acquire exp="2109284352" sp="506228" raidPoints="7" />
@ -74,46 +67,64 @@
</ai>
<drop_lists>
<death>
<group chance="2.555">
<item id="35450" min="1" max="1" chance="41.291585127202" /> <!-- Recipe: Seraph Ring (60%) -->
<item id="35448" min="1" max="1" chance="29.354207436399" /> <!-- Recipe: Seraph Necklace (60%) -->
<item id="35449" min="1" max="1" chance="29.354207436399" /> <!-- Recipe: Seraph Earring (60%) -->
</group>
<group chance="44.93">
<item id="17527" min="1" max="3" chance="36.056087246828" /> <!-- Scroll: Enchant Armor (R-grade) -->
<item id="17526" min="1" max="1" chance="5.6821722679724" /> <!-- Scroll: Enchant Weapon (R-grade) -->
<item id="35446" min="1" max="1" chance="3.3563320721122" /> <!-- Recipe: Seraph Shoes (60%) -->
<item id="35436" min="1" max="1" chance="3.3385265969286" /> <!-- Recipe: Seraph Shield (60%) -->
<item id="35434" min="1" max="1" chance="3.316269752949" /> <!-- Recipe: Seraph Gauntlets (60%) -->
<item id="35441" min="1" max="1" chance="3.2851101713777" /> <!-- Recipe: Seraph Leather Boots (60%) -->
<item id="35440" min="1" max="1" chance="3.2517249054084" /> <!-- Recipe: Seraph Leather Gloves (60%) -->
<item id="35445" min="1" max="1" chance="3.1382150011128" /> <!-- Recipe: Seraph Gloves (60%) -->
<item id="35447" min="1" max="1" chance="3.1048297351436" /> <!-- Recipe: Seraph Sigil (60%) -->
<item id="35435" min="1" max="1" chance="3.0870242599599" /> <!-- Recipe: Seraph Boots (60%) -->
<item id="35426" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Thrower (60%) -->
<item id="35433" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Gaiters (60%) -->
<item id="35439" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Leather Leggings (60%) -->
<item id="35421" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Cutter (60%) -->
<item id="35420" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Shaper (60%) -->
<item id="35442" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Circlet (60%) -->
<item id="35444" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Stockings (60%) -->
<item id="35437" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Leather Helmet (60%) -->
<item id="35422" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Slasher (60%) -->
<item id="35423" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Avenger (60%) -->
<item id="35427" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Shooter (60%) -->
<item id="35428" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Buster (60%) -->
<item id="35429" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Caster (60%) -->
<item id="35430" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Retributer (60%) -->
<item id="35431" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Seraph Helmet (60%) -->
<item id="35425" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Stormer (60%) -->
<item id="35424" min="1" max="1" chance="1.6692632984643" /> <!-- Recipe: Specter Fighter (60%) -->
<item id="35443" min="1" max="1" chance="0.66770531938571" /> <!-- Recipe: Seraph Tunic (60%) -->
<item id="35432" min="1" max="1" chance="0.66770531938571" /> <!-- Recipe: Seraph Breastplate (60%) -->
<item id="19513" min="1" max="1" chance="0.66770531938571" /> <!-- Purple Soul Crystal Fragment (R95-grade) -->
<item id="19512" min="1" max="1" chance="0.66770531938571" /> <!-- Teal Soul Crystal Fragment (R95-grade) -->
<item id="19511" min="1" max="1" chance="0.66770531938571" /> <!-- Yellow Soul Crystal Fragment (R95-grade) -->
<item id="35438" min="1" max="1" chance="0.66770531938571" /> <!-- Recipe: Seraph Leather Armor (60%) -->
</group>
<item id="17527" min="1" max="3" chance="17.37" /> <!-- Scroll: Enchant Armor (R-grade) -->
<item id="17526" min="1" max="1" chance="2.64" /> <!-- Scroll: Enchant Weapon (R-grade) -->
<item id="35435" min="1" max="1" chance="1.502" /> <!-- Recipe: Seraph Boots (60%) -->
<item id="35440" min="1" max="1" chance="1.472" /> <!-- Recipe: Seraph Leather Gloves (60%) -->
<item id="35445" min="1" max="1" chance="1.46" /> <!-- Recipe: Seraph Gloves (60%) -->
<item id="35436" min="1" max="1" chance="1.433" /> <!-- Recipe: Seraph Shield (60%) -->
<item id="35441" min="1" max="1" chance="1.421" /> <!-- Recipe: Seraph Leather Boots (60%) -->
<item id="35434" min="1" max="1" chance="1.417" /> <!-- Recipe: Seraph Gauntlets (60%) -->
<item id="35446" min="1" max="1" chance="1.412" /> <!-- Recipe: Seraph Shoes (60%) -->
<item id="35447" min="1" max="1" chance="1.406" /> <!-- Recipe: Seraph Sigil (60%) -->
<item id="35450" min="1" max="1" chance="1.082" /> <!-- Recipe: Seraph Ring (60%) -->
<item id="35437" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Leather Helmet (60%) -->
<item id="35449" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Earring (60%) -->
<item id="35439" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Leather Leggings (60%) -->
<item id="35442" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Circlet (60%) -->
<item id="35425" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Stormer (60%) -->
<item id="35448" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Necklace (60%) -->
<item id="35444" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Stockings (60%) -->
<item id="35433" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Gaiters (60%) -->
<item id="35420" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Shaper (60%) -->
<item id="35421" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Cutter (60%) -->
<item id="35422" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Slasher (60%) -->
<item id="35423" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Avenger (60%) -->
<item id="35424" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Fighter (60%) -->
<item id="35426" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Thrower (60%) -->
<item id="35427" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Shooter (60%) -->
<item id="35428" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Buster (60%) -->
<item id="35429" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Caster (60%) -->
<item id="35430" min="1" max="1" chance="0.75" /> <!-- Recipe: Specter Retributer (60%) -->
<item id="35431" min="1" max="1" chance="0.75" /> <!-- Recipe: Seraph Helmet (60%) -->
<item id="35443" min="1" max="1" chance="0.3" /> <!-- Recipe: Seraph Tunic (60%) -->
<item id="35432" min="1" max="1" chance="0.3" /> <!-- Recipe: Seraph Breastplate (60%) -->
<item id="35438" min="1" max="1" chance="0.3" /> <!-- Recipe: Seraph Leather Armor (60%) -->
<item id="46475" min="1" max="1" chance="0.075" /> <!-- Leona's Soul Crystal - Stage 2 -->
<item id="46476" min="1" max="1" chance="0.075" /> <!-- Leona's Soul Crystal - Stage 3 -->
<item id="46489" min="1" max="1" chance="0.075" /> <!-- Pantheon's Soul Crystal - Stage 1 -->
<item id="46490" min="1" max="1" chance="0.075" /> <!-- Pantheon's Soul Crystal - Stage 2 -->
<item id="46491" min="1" max="1" chance="0.075" /> <!-- Pantheon's Soul Crystal - Stage 3 -->
<item id="46504" min="1" max="1" chance="0.075" /> <!-- Lionel's Soul Crystal - Stage 1 -->
<item id="46505" min="1" max="1" chance="0.075" /> <!-- Lionel's Soul Crystal - Stage 2 -->
<item id="46506" min="1" max="1" chance="0.075" /> <!-- Lionel's Soul Crystal - Stage 3 -->
<item id="46474" min="1" max="1" chance="0.075" /> <!-- Leona's Soul Crystal - Stage 1 -->
<item id="46444" min="1" max="1" chance="0.075" /> <!-- Kain's Soul Crystal - Stage 1 -->
<item id="46459" min="1" max="1" chance="0.075" /> <!-- Mermoden's Soul Crystal - Stage 1 -->
<item id="46508" min="1" max="1" chance="0.03" /> <!-- Lionel's Soul Crystal - Stage 5 -->
<item id="46507" min="1" max="1" chance="0.03" /> <!-- Lionel's Soul Crystal - Stage 4 -->
<item id="46445" min="1" max="1" chance="0.03" /> <!-- Kain's Soul Crystal - Stage 2 -->
<item id="46446" min="1" max="1" chance="0.03" /> <!-- Kain's Soul Crystal - Stage 3 -->
<item id="46493" min="1" max="1" chance="0.03" /> <!-- Pantheon's Soul Crystal - Stage 5 -->
<item id="46492" min="1" max="1" chance="0.03" /> <!-- Pantheon's Soul Crystal - Stage 4 -->
<item id="46447" min="1" max="1" chance="0.03" /> <!-- Kain's Soul Crystal - Stage 4 -->
<item id="46478" min="1" max="1" chance="0.03" /> <!-- Leona's Soul Crystal - Stage 5 -->
<item id="46477" min="1" max="1" chance="0.03" /> <!-- Leona's Soul Crystal - Stage 4 -->
<item id="46460" min="1" max="1" chance="0.03" /> <!-- Mermoden's Soul Crystal - Stage 2 -->
<item id="46461" min="1" max="1" chance="0.03" /> <!-- Mermoden's Soul Crystal - Stage 3 -->
<item id="46462" min="1" max="1" chance="0.03" /> <!-- Mermoden's Soul Crystal - Stage 4 -->
<item id="46448" min="1" max="1" chance="0.0075" /> <!-- Kain's Soul Crystal - Stage 5 -->
<item id="46463" min="1" max="1" chance="0.0075" /> <!-- Mermoden's Soul Crystal - Stage 5 -->
</death>
<lucky_corpse>
<item id="39629" min="2" max="2" chance="100" /> <!-- Fortune Pocket - Stage 1 -->