Tauti and Teredor html improvements.

This commit is contained in:
MobiusDev 2017-11-19 11:30:08 +00:00
parent bf030049bb
commit ece032632d
52 changed files with 416 additions and 132 deletions

View File

@ -1,7 +1,7 @@
<html><body>Sizrak:<br>
You'd like to challenge <font color="LEVEL">Tauti</font>, eh? We would as well.<br>
<font color="LEVEL"> (In order to challenge Tauti, you need an alliance with parties that are level 97 or above. Maximum of 35 people can join at once. You can enter the Instanced Zone through the alliance leader. Every member must also have a Mark of Resistance.) </font><br>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">Back</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</button>
</body></html>

View File

@ -9,10 +9,15 @@
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party" />
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="5" />
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html"/>
</condition>
<condition type="PartyLeader" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html"/>
</condition>
<condition type="GroupMin" showMessageAndHtml="true">
<param name="limit" value="5"/>
<param name="html" value="condMinLimit.html"/>
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />

View File

@ -1,4 +1,4 @@
<html><body>Finaria:<br>
Welcome back! I've been waiting for you. A fierce battle between the <font color="LEVEL">Revolutionaries</font> and <font color="LEVEL">Kundas</font>.<br>
Be careful! If all the <font color="LEVEL">Revolutionaries</font> fall, our plans to the end! Help <font color="LEVEL">Revolutionaries</font> to beat <font color="LEVEL">Kunda</font>. Before everyone power <font color="LEVEL">Revolutionaries</font> run out of, you must immediately kill <font color="LEVEL">Tauti</font>!<br>
<html><body>Pinaria:<br>
Welcome. I've been waiting for you. We <font color="LEVEL">Revolutionaries</font> are fighting the <font color="LEVEL">Kunda</font>.<br>
We must not fail! Please, lend your aid to our cause and join us in fighting the <font color="LEVEL">Kunda</font>, or kill <font color="LEVEL">Tauti</font> before all of the <font color="LEVEL">Revolutionaries</font> fall.
</body></html>

View File

@ -1,3 +1,3 @@
<html><body>Teleport Device:<br>
You do not have the key.<br>
(You need a key for this.)
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Mechanical device. Requires key.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"Use key"</Button>
(There is a keyhole.)<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"I have the key."</Button>
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Teleport Device is now working.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest TautiWarzone teleport">"Move"</Button>
Operative.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone teleport">Go upstairs</Button>
</body></html>

View File

@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import instances.AbstractInstance;
@ -84,6 +85,7 @@ public final class TautiWarzone extends AbstractInstance
{
takeItems(player, KEY_OF_DARKNESS, -1);
world.setStatus(3);
npc.broadcastPacket(new OnEventTrigger(15235001, true));
return "33678-3.htm";
}
return "33678-1.htm";

View File

@ -0,0 +1,6 @@
<html><body>Filaur of the Gray Pillar:<br>
When you're ready, say <font color="LEVEL">Elder Filaur is awesome!!</font> <font color="LEVEL">Loudly</font>. I'll take that as the signal to send you to the home of Teredor.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">"This is not the time for foolishness."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Filaur of the Gray Pillar:<br>
I'm not kidding around either! I will let you enter when you say <font color="LEVEL">Elder Filaur is awesome!!</font>. My job is pretty thankless, and I need all the ego boosts I can get.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -22,6 +22,7 @@ import java.util.Map;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.instancemanager.WalkingManager;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.L2Party;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable;
@ -68,6 +69,7 @@ public final class TeredorWarzone extends AbstractInstance
private static final SkillHolder TEREDOR_CANCEL = new SkillHolder(5902, 1);
// Misc
private static final int TEMPLATE_ID = 160;
private static final int MIN_PLAYERS = 5;
//@formatter:off
private static final Map<Integer, String[]> WALKING_DATA = new HashMap<>();
static
@ -88,7 +90,7 @@ public final class TeredorWarzone extends AbstractInstance
super(TEMPLATE_ID);
addStartNpc(FILAUR);
addTalkId(FILAUR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR, TEREDOR_POISON);
addSpellFinishedId(BEETLE);
addEventReceivedId(EGG_2);
addAttackId(TEREDOR);
@ -116,16 +118,13 @@ public final class TeredorWarzone extends AbstractInstance
}
case "FAKE_TEREDOR_POISON_TIMER":
{
final L2Npc minion = addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("POISON_TIMER", 5000, minion, null);
getTimers().addTimer("POISON_TIMER", 10000, minion, null);
getTimers().addTimer("POISON_TIMER", 15000, minion, null);
getTimers().addTimer("POISON_TIMER", 20000, minion, null);
getTimers().addTimer("DELETE_ME", 22000, minion, null);
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
break;
}
case "POISON_TIMER":
case "POISON_TIMER_1":
case "POISON_TIMER_2":
case "POISON_TIMER_3":
case "POISON_TIMER_4":
{
addSkillCastDesire(npc, npc, POISON_SKILL, 23);
break;
@ -160,7 +159,7 @@ public final class TeredorWarzone extends AbstractInstance
}
else
{
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(myself->sm->x), gg->FloatToInt(myself->sm->y), gg->FloatToInt(myself->sm->z), 0, 0, 0, 0); //TODO:
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("TEREDOR_POISON_TIMER", 2000, npc, null);
}
break;
@ -182,11 +181,47 @@ public final class TeredorWarzone extends AbstractInstance
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equals("enterInstance"))
String htmltext = null;
switch (event)
{
enterInstance(player, npc, TEMPLATE_ID);
case "enterInstance":
{
enterInstance(player, npc, TEMPLATE_ID);
break;
}
case "checkConditions":
{
final Instance playerInstance = getPlayerInstance(player);
final L2Party playerParty = player.getParty();
if ((playerInstance != null) && (playerInstance.getTemplateId() == TEMPLATE_ID))
{
enterInstance(player, npc, TEMPLATE_ID);
}
else if (playerParty == null)
{
htmltext = "condNoParty.html";
}
else
{
if (playerParty.getLeader() == player)
{
htmltext = (playerParty.getMemberCount() >= MIN_PLAYERS ? "30535-01.html" : "condMinLimit.html");
}
else
{
htmltext = "condNoPartyLeader.html";
}
}
break;
}
case "30535-02.html":
{
htmltext = event;
}
}
return super.onAdvEvent(event, npc, player);
return htmltext;
}
@Override
@ -224,6 +259,15 @@ public final class TeredorWarzone extends AbstractInstance
getTimers().addTimer("FAKE_TEREDOR_POISON_TIMER", 3000, npc, null);
break;
}
case TEREDOR_POISON:
{
getTimers().addTimer("POISON_TIMER_1", 5000, npc, null);
getTimers().addTimer("POISON_TIMER_2", 10000, npc, null);
getTimers().addTimer("POISON_TIMER_3", 15000, npc, null);
getTimers().addTimer("POISON_TIMER_4", 20000, npc, null);
getTimers().addTimer("DELETE_ME", 22000, npc, null);
break;
}
default:
{
npc.initSeenCreatures();
@ -429,7 +473,7 @@ public final class TeredorWarzone extends AbstractInstance
if ((npc.distFromMe(attacker) > 450) && (getRandom(100) < 5))
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
if ((hpPer <= 80) && (hpPer >= 60))
@ -454,7 +498,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 1)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 60) && (hpPer >= 40))
@ -480,7 +524,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 3)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 40) && (hpPer >= 20))
@ -519,7 +563,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if (hpPer < 20)
@ -560,7 +604,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL_2, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
else if (getRandom(100) < 5)
{

View File

@ -0,0 +1,3 @@
<html><body>Filaur of the Gray Pillar:<br>
You need at least 5 people to face Teredor. Because, well, it's hard otherwise. Bring 5.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
No, no, no! You can only go in here if you have allies with you. Why are you alone? Surely you're not that much of a loser? That would be so sad.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
I see you have allies with you, but I need to speak to your captain.
</body></html>

View File

@ -1,7 +1,7 @@
<html><body>Sizrak:<br>
You'd like to challenge <font color="LEVEL">Tauti</font>, eh? We would as well.<br>
<font color="LEVEL"> (In order to challenge Tauti, you need an alliance with parties that are level 97 or above. Maximum of 35 people can join at once. You can enter the Instanced Zone through the alliance leader. Every member must also have a Mark of Resistance.) </font><br>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">Back</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</button>
</body></html>

View File

@ -9,10 +9,15 @@
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party" />
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="5" />
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html"/>
</condition>
<condition type="PartyLeader" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html"/>
</condition>
<condition type="GroupMin" showMessageAndHtml="true">
<param name="limit" value="5"/>
<param name="html" value="condMinLimit.html"/>
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />

View File

@ -1,4 +1,4 @@
<html><body>Finaria:<br>
Welcome back! I've been waiting for you. A fierce battle between the <font color="LEVEL">Revolutionaries</font> and <font color="LEVEL">Kundas</font>.<br>
Be careful! If all the <font color="LEVEL">Revolutionaries</font> fall, our plans to the end! Help <font color="LEVEL">Revolutionaries</font> to beat <font color="LEVEL">Kunda</font>. Before everyone power <font color="LEVEL">Revolutionaries</font> run out of, you must immediately kill <font color="LEVEL">Tauti</font>!<br>
<html><body>Pinaria:<br>
Welcome. I've been waiting for you. We <font color="LEVEL">Revolutionaries</font> are fighting the <font color="LEVEL">Kunda</font>.<br>
We must not fail! Please, lend your aid to our cause and join us in fighting the <font color="LEVEL">Kunda</font>, or kill <font color="LEVEL">Tauti</font> before all of the <font color="LEVEL">Revolutionaries</font> fall.
</body></html>

View File

@ -1,3 +1,3 @@
<html><body>Teleport Device:<br>
You do not have the key.<br>
(You need a key for this.)
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Mechanical device. Requires key.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"Use key"</Button>
(There is a keyhole.)<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"I have the key."</Button>
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Teleport Device is now working.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest TautiWarzone teleport">"Move"</Button>
Operative.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone teleport">Go upstairs</Button>
</body></html>

View File

@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import instances.AbstractInstance;
@ -84,6 +85,7 @@ public final class TautiWarzone extends AbstractInstance
{
takeItems(player, KEY_OF_DARKNESS, -1);
world.setStatus(3);
npc.broadcastPacket(new OnEventTrigger(15235001, true));
return "33678-3.htm";
}
return "33678-1.htm";

View File

@ -0,0 +1,6 @@
<html><body>Filaur of the Gray Pillar:<br>
When you're ready, say <font color="LEVEL">Elder Filaur is awesome!!</font> <font color="LEVEL">Loudly</font>. I'll take that as the signal to send you to the home of Teredor.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">"This is not the time for foolishness."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Filaur of the Gray Pillar:<br>
I'm not kidding around either! I will let you enter when you say <font color="LEVEL">Elder Filaur is awesome!!</font>. My job is pretty thankless, and I need all the ego boosts I can get.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -22,6 +22,7 @@ import java.util.Map;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.instancemanager.WalkingManager;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.L2Party;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable;
@ -68,6 +69,7 @@ public final class TeredorWarzone extends AbstractInstance
private static final SkillHolder TEREDOR_CANCEL = new SkillHolder(5902, 1);
// Misc
private static final int TEMPLATE_ID = 160;
private static final int MIN_PLAYERS = 5;
//@formatter:off
private static final Map<Integer, String[]> WALKING_DATA = new HashMap<>();
static
@ -88,7 +90,7 @@ public final class TeredorWarzone extends AbstractInstance
super(TEMPLATE_ID);
addStartNpc(FILAUR);
addTalkId(FILAUR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR, TEREDOR_POISON);
addSpellFinishedId(BEETLE);
addEventReceivedId(EGG_2);
addAttackId(TEREDOR);
@ -116,16 +118,13 @@ public final class TeredorWarzone extends AbstractInstance
}
case "FAKE_TEREDOR_POISON_TIMER":
{
final L2Npc minion = addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("POISON_TIMER", 5000, minion, null);
getTimers().addTimer("POISON_TIMER", 10000, minion, null);
getTimers().addTimer("POISON_TIMER", 15000, minion, null);
getTimers().addTimer("POISON_TIMER", 20000, minion, null);
getTimers().addTimer("DELETE_ME", 22000, minion, null);
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
break;
}
case "POISON_TIMER":
case "POISON_TIMER_1":
case "POISON_TIMER_2":
case "POISON_TIMER_3":
case "POISON_TIMER_4":
{
addSkillCastDesire(npc, npc, POISON_SKILL, 23);
break;
@ -160,7 +159,7 @@ public final class TeredorWarzone extends AbstractInstance
}
else
{
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(myself->sm->x), gg->FloatToInt(myself->sm->y), gg->FloatToInt(myself->sm->z), 0, 0, 0, 0); //TODO:
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("TEREDOR_POISON_TIMER", 2000, npc, null);
}
break;
@ -182,11 +181,47 @@ public final class TeredorWarzone extends AbstractInstance
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equals("enterInstance"))
String htmltext = null;
switch (event)
{
enterInstance(player, npc, TEMPLATE_ID);
case "enterInstance":
{
enterInstance(player, npc, TEMPLATE_ID);
break;
}
case "checkConditions":
{
final Instance playerInstance = getPlayerInstance(player);
final L2Party playerParty = player.getParty();
if ((playerInstance != null) && (playerInstance.getTemplateId() == TEMPLATE_ID))
{
enterInstance(player, npc, TEMPLATE_ID);
}
else if (playerParty == null)
{
htmltext = "condNoParty.html";
}
else
{
if (playerParty.getLeader() == player)
{
htmltext = (playerParty.getMemberCount() >= MIN_PLAYERS ? "30535-01.html" : "condMinLimit.html");
}
else
{
htmltext = "condNoPartyLeader.html";
}
}
break;
}
case "30535-02.html":
{
htmltext = event;
}
}
return super.onAdvEvent(event, npc, player);
return htmltext;
}
@Override
@ -224,6 +259,15 @@ public final class TeredorWarzone extends AbstractInstance
getTimers().addTimer("FAKE_TEREDOR_POISON_TIMER", 3000, npc, null);
break;
}
case TEREDOR_POISON:
{
getTimers().addTimer("POISON_TIMER_1", 5000, npc, null);
getTimers().addTimer("POISON_TIMER_2", 10000, npc, null);
getTimers().addTimer("POISON_TIMER_3", 15000, npc, null);
getTimers().addTimer("POISON_TIMER_4", 20000, npc, null);
getTimers().addTimer("DELETE_ME", 22000, npc, null);
break;
}
default:
{
npc.initSeenCreatures();
@ -429,7 +473,7 @@ public final class TeredorWarzone extends AbstractInstance
if ((npc.distFromMe(attacker) > 450) && (getRandom(100) < 5))
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
if ((hpPer <= 80) && (hpPer >= 60))
@ -454,7 +498,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 1)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 60) && (hpPer >= 40))
@ -480,7 +524,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 3)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 40) && (hpPer >= 20))
@ -519,7 +563,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if (hpPer < 20)
@ -560,7 +604,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL_2, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
else if (getRandom(100) < 5)
{

View File

@ -0,0 +1,3 @@
<html><body>Filaur of the Gray Pillar:<br>
You need at least 5 people to face Teredor. Because, well, it's hard otherwise. Bring 5.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
No, no, no! You can only go in here if you have allies with you. Why are you alone? Surely you're not that much of a loser? That would be so sad.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
I see you have allies with you, but I need to speak to your captain.
</body></html>

View File

@ -1,7 +1,7 @@
<html><body>Sizrak:<br>
You'd like to challenge <font color="LEVEL">Tauti</font>, eh? We would as well.<br>
<font color="LEVEL"> (In order to challenge Tauti, you need an alliance with parties that are level 97 or above. Maximum of 35 people can join at once. You can enter the Instanced Zone through the alliance leader. Every member must also have a Mark of Resistance.) </font><br>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">Back</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</button>
</body></html>

View File

@ -9,10 +9,15 @@
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party" />
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="5" />
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html"/>
</condition>
<condition type="PartyLeader" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html"/>
</condition>
<condition type="GroupMin" showMessageAndHtml="true">
<param name="limit" value="5"/>
<param name="html" value="condMinLimit.html"/>
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />

View File

@ -1,4 +1,4 @@
<html><body>Finaria:<br>
Welcome back! I've been waiting for you. A fierce battle between the <font color="LEVEL">Revolutionaries</font> and <font color="LEVEL">Kundas</font>.<br>
Be careful! If all the <font color="LEVEL">Revolutionaries</font> fall, our plans to the end! Help <font color="LEVEL">Revolutionaries</font> to beat <font color="LEVEL">Kunda</font>. Before everyone power <font color="LEVEL">Revolutionaries</font> run out of, you must immediately kill <font color="LEVEL">Tauti</font>!<br>
<html><body>Pinaria:<br>
Welcome. I've been waiting for you. We <font color="LEVEL">Revolutionaries</font> are fighting the <font color="LEVEL">Kunda</font>.<br>
We must not fail! Please, lend your aid to our cause and join us in fighting the <font color="LEVEL">Kunda</font>, or kill <font color="LEVEL">Tauti</font> before all of the <font color="LEVEL">Revolutionaries</font> fall.
</body></html>

View File

@ -1,3 +1,3 @@
<html><body>Teleport Device:<br>
You do not have the key.<br>
(You need a key for this.)
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Mechanical device. Requires key.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"Use key"</Button>
(There is a keyhole.)<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"I have the key."</Button>
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Teleport Device is now working.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest TautiWarzone teleport">"Move"</Button>
Operative.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone teleport">Go upstairs</Button>
</body></html>

View File

@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import instances.AbstractInstance;
@ -84,6 +85,7 @@ public final class TautiWarzone extends AbstractInstance
{
takeItems(player, KEY_OF_DARKNESS, -1);
world.setStatus(3);
npc.broadcastPacket(new OnEventTrigger(15235001, true));
return "33678-3.htm";
}
return "33678-1.htm";

View File

@ -0,0 +1,6 @@
<html><body>Filaur of the Gray Pillar:<br>
When you're ready, say <font color="LEVEL">Elder Filaur is awesome!!</font> <font color="LEVEL">Loudly</font>. I'll take that as the signal to send you to the home of Teredor.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">"This is not the time for foolishness."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Filaur of the Gray Pillar:<br>
I'm not kidding around either! I will let you enter when you say <font color="LEVEL">Elder Filaur is awesome!!</font>. My job is pretty thankless, and I need all the ego boosts I can get.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -22,6 +22,7 @@ import java.util.Map;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.instancemanager.WalkingManager;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.L2Party;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable;
@ -68,6 +69,7 @@ public final class TeredorWarzone extends AbstractInstance
private static final SkillHolder TEREDOR_CANCEL = new SkillHolder(5902, 1);
// Misc
private static final int TEMPLATE_ID = 160;
private static final int MIN_PLAYERS = 5;
//@formatter:off
private static final Map<Integer, String[]> WALKING_DATA = new HashMap<>();
static
@ -88,7 +90,7 @@ public final class TeredorWarzone extends AbstractInstance
super(TEMPLATE_ID);
addStartNpc(FILAUR);
addTalkId(FILAUR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR, TEREDOR_POISON);
addSpellFinishedId(BEETLE);
addEventReceivedId(EGG_2);
addAttackId(TEREDOR);
@ -116,16 +118,13 @@ public final class TeredorWarzone extends AbstractInstance
}
case "FAKE_TEREDOR_POISON_TIMER":
{
final L2Npc minion = addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("POISON_TIMER", 5000, minion, null);
getTimers().addTimer("POISON_TIMER", 10000, minion, null);
getTimers().addTimer("POISON_TIMER", 15000, minion, null);
getTimers().addTimer("POISON_TIMER", 20000, minion, null);
getTimers().addTimer("DELETE_ME", 22000, minion, null);
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
break;
}
case "POISON_TIMER":
case "POISON_TIMER_1":
case "POISON_TIMER_2":
case "POISON_TIMER_3":
case "POISON_TIMER_4":
{
addSkillCastDesire(npc, npc, POISON_SKILL, 23);
break;
@ -160,7 +159,7 @@ public final class TeredorWarzone extends AbstractInstance
}
else
{
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(myself->sm->x), gg->FloatToInt(myself->sm->y), gg->FloatToInt(myself->sm->z), 0, 0, 0, 0); //TODO:
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("TEREDOR_POISON_TIMER", 2000, npc, null);
}
break;
@ -182,11 +181,47 @@ public final class TeredorWarzone extends AbstractInstance
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equals("enterInstance"))
String htmltext = null;
switch (event)
{
enterInstance(player, npc, TEMPLATE_ID);
case "enterInstance":
{
enterInstance(player, npc, TEMPLATE_ID);
break;
}
case "checkConditions":
{
final Instance playerInstance = getPlayerInstance(player);
final L2Party playerParty = player.getParty();
if ((playerInstance != null) && (playerInstance.getTemplateId() == TEMPLATE_ID))
{
enterInstance(player, npc, TEMPLATE_ID);
}
else if (playerParty == null)
{
htmltext = "condNoParty.html";
}
else
{
if (playerParty.getLeader() == player)
{
htmltext = (playerParty.getMemberCount() >= MIN_PLAYERS ? "30535-01.html" : "condMinLimit.html");
}
else
{
htmltext = "condNoPartyLeader.html";
}
}
break;
}
case "30535-02.html":
{
htmltext = event;
}
}
return super.onAdvEvent(event, npc, player);
return htmltext;
}
@Override
@ -224,6 +259,15 @@ public final class TeredorWarzone extends AbstractInstance
getTimers().addTimer("FAKE_TEREDOR_POISON_TIMER", 3000, npc, null);
break;
}
case TEREDOR_POISON:
{
getTimers().addTimer("POISON_TIMER_1", 5000, npc, null);
getTimers().addTimer("POISON_TIMER_2", 10000, npc, null);
getTimers().addTimer("POISON_TIMER_3", 15000, npc, null);
getTimers().addTimer("POISON_TIMER_4", 20000, npc, null);
getTimers().addTimer("DELETE_ME", 22000, npc, null);
break;
}
default:
{
npc.initSeenCreatures();
@ -429,7 +473,7 @@ public final class TeredorWarzone extends AbstractInstance
if ((npc.distFromMe(attacker) > 450) && (getRandom(100) < 5))
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
if ((hpPer <= 80) && (hpPer >= 60))
@ -454,7 +498,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 1)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 60) && (hpPer >= 40))
@ -480,7 +524,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 3)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 40) && (hpPer >= 20))
@ -519,7 +563,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if (hpPer < 20)
@ -560,7 +604,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL_2, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
else if (getRandom(100) < 5)
{

View File

@ -0,0 +1,3 @@
<html><body>Filaur of the Gray Pillar:<br>
You need at least 5 people to face Teredor. Because, well, it's hard otherwise. Bring 5.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
No, no, no! You can only go in here if you have allies with you. Why are you alone? Surely you're not that much of a loser? That would be so sad.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
I see you have allies with you, but I need to speak to your captain.
</body></html>

View File

@ -1,7 +1,7 @@
<html><body>Sizrak:<br>
You'd like to challenge <font color="LEVEL">Tauti</font>, eh? We would as well.<br>
<font color="LEVEL"> (In order to challenge Tauti, you need an alliance with parties that are level 97 or above. Maximum of 35 people can join at once. You can enter the Instanced Zone through the alliance leader. Every member must also have a Mark of Resistance.) </font><br>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="RETURN" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h npc_%objectId%_Chat 0">Back</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterEasyInstance">"I am ready to fight. (Normal)"</button>
<button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone enterExtremeInstance">"I will make him pay! (Extreme)"</button>
<Button ALIGN=LEFT ICON="RETURN" action="bypass -h npc_%objectId%_Chat 0">Back</button>
</body></html>

View File

@ -9,10 +9,15 @@
<exit type="ORIGIN" />
</locations>
<conditions>
<condition type="Party" />
<condition type="PartyLeader" />
<condition type="GroupMin">
<param name="limit" value="5" />
<condition type="Party" showMessageAndHtml="true">
<param name="html" value="condNoParty.html"/>
</condition>
<condition type="PartyLeader" showMessageAndHtml="true">
<param name="html" value="condNoPartyLeader.html"/>
</condition>
<condition type="GroupMin" showMessageAndHtml="true">
<param name="limit" value="5"/>
<param name="html" value="condMinLimit.html"/>
</condition>
<condition type="GroupMax">
<param name="limit" value="7" />

View File

@ -1,4 +1,4 @@
<html><body>Finaria:<br>
Welcome back! I've been waiting for you. A fierce battle between the <font color="LEVEL">Revolutionaries</font> and <font color="LEVEL">Kundas</font>.<br>
Be careful! If all the <font color="LEVEL">Revolutionaries</font> fall, our plans to the end! Help <font color="LEVEL">Revolutionaries</font> to beat <font color="LEVEL">Kunda</font>. Before everyone power <font color="LEVEL">Revolutionaries</font> run out of, you must immediately kill <font color="LEVEL">Tauti</font>!<br>
<html><body>Pinaria:<br>
Welcome. I've been waiting for you. We <font color="LEVEL">Revolutionaries</font> are fighting the <font color="LEVEL">Kunda</font>.<br>
We must not fail! Please, lend your aid to our cause and join us in fighting the <font color="LEVEL">Kunda</font>, or kill <font color="LEVEL">Tauti</font> before all of the <font color="LEVEL">Revolutionaries</font> fall.
</body></html>

View File

@ -1,3 +1,3 @@
<html><body>Teleport Device:<br>
You do not have the key.<br>
(You need a key for this.)
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Mechanical device. Requires key.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"Use key"</Button>
(There is a keyhole.)<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone useKey">"I have the key."</Button>
</body></html>

View File

@ -1,4 +1,4 @@
<html><body>Teleport Device:<br>
Teleport Device is now working.<br>
<Button ALIGN=LEFT ICON="TELEPORT" action="bypass -h Quest TautiWarzone teleport">"Move"</Button>
Operative.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TautiWarzone teleport">Go upstairs</Button>
</body></html>

View File

@ -24,6 +24,7 @@ import com.l2jmobius.gameserver.model.actor.L2Npc;
import com.l2jmobius.gameserver.model.actor.instance.L2MonsterInstance;
import com.l2jmobius.gameserver.model.actor.instance.L2PcInstance;
import com.l2jmobius.gameserver.model.instancezone.Instance;
import com.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
import instances.AbstractInstance;
@ -84,6 +85,7 @@ public final class TautiWarzone extends AbstractInstance
{
takeItems(player, KEY_OF_DARKNESS, -1);
world.setStatus(3);
npc.broadcastPacket(new OnEventTrigger(15235001, true));
return "33678-3.htm";
}
return "33678-1.htm";

View File

@ -0,0 +1,6 @@
<html><body>Filaur of the Gray Pillar:<br>
When you're ready, say <font color="LEVEL">Elder Filaur is awesome!!</font> <font color="LEVEL">Loudly</font>. I'll take that as the signal to send you to the home of Teredor.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">"This is not the time for foolishness."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -0,0 +1,5 @@
<html><body>Filaur of the Gray Pillar:<br>
I'm not kidding around either! I will let you enter when you say <font color="LEVEL">Elder Filaur is awesome!!</font>. My job is pretty thankless, and I need all the ego boosts I can get.<br>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone 30535-02.html">(Haltingly) "A... Amer... is amazing..."</Button>
<Button ALIGN=LEFT ICON="NORMAL" action="bypass -h Quest TeredorWarzone enterInstance">(Loudly) "Elder Filaur is awesome!!!"</Button>
</body></html>

View File

@ -22,6 +22,7 @@ import java.util.Map;
import com.l2jmobius.gameserver.ai.CtrlIntention;
import com.l2jmobius.gameserver.instancemanager.WalkingManager;
import com.l2jmobius.gameserver.model.L2Object;
import com.l2jmobius.gameserver.model.L2Party;
import com.l2jmobius.gameserver.model.Location;
import com.l2jmobius.gameserver.model.StatsSet;
import com.l2jmobius.gameserver.model.actor.L2Attackable;
@ -68,6 +69,7 @@ public final class TeredorWarzone extends AbstractInstance
private static final SkillHolder TEREDOR_CANCEL = new SkillHolder(5902, 1);
// Misc
private static final int TEMPLATE_ID = 160;
private static final int MIN_PLAYERS = 5;
//@formatter:off
private static final Map<Integer, String[]> WALKING_DATA = new HashMap<>();
static
@ -88,7 +90,7 @@ public final class TeredorWarzone extends AbstractInstance
super(TEMPLATE_ID);
addStartNpc(FILAUR);
addTalkId(FILAUR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR);
addSpawnId(BEETLE, POS_CHECKER, EGG_2, FAKE_TEREDOR, TEREDOR, TEREDOR_POISON);
addSpellFinishedId(BEETLE);
addEventReceivedId(EGG_2);
addAttackId(TEREDOR);
@ -116,16 +118,13 @@ public final class TeredorWarzone extends AbstractInstance
}
case "FAKE_TEREDOR_POISON_TIMER":
{
final L2Npc minion = addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("POISON_TIMER", 5000, minion, null);
getTimers().addTimer("POISON_TIMER", 10000, minion, null);
getTimers().addTimer("POISON_TIMER", 15000, minion, null);
getTimers().addTimer("POISON_TIMER", 20000, minion, null);
getTimers().addTimer("DELETE_ME", 22000, minion, null);
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
break;
}
case "POISON_TIMER":
case "POISON_TIMER_1":
case "POISON_TIMER_2":
case "POISON_TIMER_3":
case "POISON_TIMER_4":
{
addSkillCastDesire(npc, npc, POISON_SKILL, 23);
break;
@ -160,7 +159,7 @@ public final class TeredorWarzone extends AbstractInstance
}
else
{
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(myself->sm->x), gg->FloatToInt(myself->sm->y), gg->FloatToInt(myself->sm->z), 0, 0, 0, 0); //TODO:
addSpawn(TEREDOR_POISON, npc.getX(), npc.getY(), npc.getZ(), 0, false, 0, false, instance.getId());
getTimers().addTimer("TEREDOR_POISON_TIMER", 2000, npc, null);
}
break;
@ -182,11 +181,47 @@ public final class TeredorWarzone extends AbstractInstance
@Override
public String onAdvEvent(String event, L2Npc npc, L2PcInstance player)
{
if (event.equals("enterInstance"))
String htmltext = null;
switch (event)
{
enterInstance(player, npc, TEMPLATE_ID);
case "enterInstance":
{
enterInstance(player, npc, TEMPLATE_ID);
break;
}
case "checkConditions":
{
final Instance playerInstance = getPlayerInstance(player);
final L2Party playerParty = player.getParty();
if ((playerInstance != null) && (playerInstance.getTemplateId() == TEMPLATE_ID))
{
enterInstance(player, npc, TEMPLATE_ID);
}
else if (playerParty == null)
{
htmltext = "condNoParty.html";
}
else
{
if (playerParty.getLeader() == player)
{
htmltext = (playerParty.getMemberCount() >= MIN_PLAYERS ? "30535-01.html" : "condMinLimit.html");
}
else
{
htmltext = "condNoPartyLeader.html";
}
}
break;
}
case "30535-02.html":
{
htmltext = event;
}
}
return super.onAdvEvent(event, npc, player);
return htmltext;
}
@Override
@ -224,6 +259,15 @@ public final class TeredorWarzone extends AbstractInstance
getTimers().addTimer("FAKE_TEREDOR_POISON_TIMER", 3000, npc, null);
break;
}
case TEREDOR_POISON:
{
getTimers().addTimer("POISON_TIMER_1", 5000, npc, null);
getTimers().addTimer("POISON_TIMER_2", 10000, npc, null);
getTimers().addTimer("POISON_TIMER_3", 15000, npc, null);
getTimers().addTimer("POISON_TIMER_4", 20000, npc, null);
getTimers().addTimer("DELETE_ME", 22000, npc, null);
break;
}
default:
{
npc.initSeenCreatures();
@ -429,7 +473,7 @@ public final class TeredorWarzone extends AbstractInstance
if ((npc.distFromMe(attacker) > 450) && (getRandom(100) < 5))
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
if ((hpPer <= 80) && (hpPer >= 60))
@ -454,7 +498,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 1)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 60) && (hpPer >= 40))
@ -480,7 +524,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 3)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if ((hpPer <= 40) && (hpPer >= 20))
@ -519,7 +563,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
}
else if (hpPer < 20)
@ -560,7 +604,7 @@ public final class TeredorWarzone extends AbstractInstance
else if (getRandom(100) < 5)
{
addSkillCastDesire(npc, attacker, TEREDOR_POISON_SKILL_2, 23);
// myself->CreateOnePrivateEx(18998, "trajan_poison_dummy", 0, 0, gg->FloatToInt(attacker->x), gg->FloatToInt(attacker->y), gg->FloatToInt(attacker->z), 0, 0, 0, 0);
addSpawn(TEREDOR_POISON, attacker.getX(), attacker.getY(), attacker.getZ(), 0, false, 0, false, instance.getId());
}
else if (getRandom(100) < 5)
{

View File

@ -0,0 +1,3 @@
<html><body>Filaur of the Gray Pillar:<br>
You need at least 5 people to face Teredor. Because, well, it's hard otherwise. Bring 5.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
No, no, no! You can only go in here if you have allies with you. Why are you alone? Surely you're not that much of a loser? That would be so sad.
</body></html>

View File

@ -0,0 +1,3 @@
<html><body>Elder Filaur:<br>
I see you have allies with you, but I need to speak to your captain.
</body></html>