From 7d7081c138c201704ced835f690c622365daf2da Mon Sep 17 00:00:00 2001
From: MobiusDevelopment <8391001+MobiusDevelopment@users.noreply.github.com>
Date: Sun, 19 Jan 2020 11:08:39 +0000
Subject: [PATCH] Updated Primeval Island and added missing spawns to Storm
Island. Contributed by Edoo.
---
.../dist/game/data/html/default/34527.htm | 3 +
.../dist/game/data/html/teleporter/34526.htm | 8 +
.../ElrokiTeleporters/32111-no.html | 3 -
.../PrimevalIsle/ElrokiTeleporters/32111.html | 6 -
.../ElrokiTeleporters/32112-no.html | 3 -
.../PrimevalIsle/ElrokiTeleporters/32112.html | 5 -
.../ElrokiTeleporters/ElrokiTeleporters.java | 63 --
.../ai/areas/PrimevalIsle/PrimevalIsle.java | 500 ----------
.../data/spawns/LimitedZones/PrimevalIsle.xml | 897 ++++++++++++++++++
.../data/spawns/LimitedZones/StormIsle.xml | 16 +
.../game/data/spawns/Rune/PrimevalIsle.xml | 570 -----------
.../dist/game/data/stats/npcs/34500-34599.xml | 2 +-
.../data/teleporters/others/PrimevalIsle.xml | 7 +-
13 files changed, 930 insertions(+), 1153 deletions(-)
create mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/default/34527.htm
create mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/teleporter/34526.htm
delete mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111-no.html
delete mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111.html
delete mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112-no.html
delete mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112.html
delete mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/ElrokiTeleporters.java
delete mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/PrimevalIsle.java
create mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/PrimevalIsle.xml
delete mode 100644 L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/Rune/PrimevalIsle.xml
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/default/34527.htm b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/default/34527.htm
new file mode 100644
index 0000000000..66600b6eaf
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/default/34527.htm
@@ -0,0 +1,3 @@
+
Expedition Guard:
+There are many dangerous monsters outside the camps. Don't let your guard down.
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/teleporter/34526.htm b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/teleporter/34526.htm
new file mode 100644
index 0000000000..c03d419d61
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/html/teleporter/34526.htm
@@ -0,0 +1,8 @@
+Expedition Teleporter:
+We will safely send you to our camps.
+Where would you like to go?
+
+
+
+
+
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111-no.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111-no.html
deleted file mode 100644
index a1f89b79ec..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111-no.html
+++ /dev/null
@@ -1,3 +0,0 @@
-Orahochin:
-Oh ho -- you have sought me out while battling the dinosaurs, have you? And now you ask me to teleport you to that place? That island was created as as a sanctuary; it is my duty is to protect its inhabitants from external harm. I certainly have no intention of making that place a refuge for reckless adventurers! It is my policy not to teleport any who are engaged in battle, so return after the battle has ended.
-
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111.html
deleted file mode 100644
index d2dc1a7910..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32111.html
+++ /dev/null
@@ -1,6 +0,0 @@
-Orahochin:
-Welcome! I am Orahochin, proud warrior of the Elroki tribe! I was sent here to guard this place. In truth, I guard the hope and future of the tribe itself. You don't understand? Ah, my young friend, I hope your feet are quicker than your wits! Ha ha!
-See the island over there? There you will find a village of innocent, peaceful Elroki natives. They are far different than the degraded Elrokhians you find here, that I can assure you.
-To protect them, I will transport only those to the island that mean them no harm. Ah... You don't seem like the dangerous sort -- I will teleport you to the island if you wish.
-
-
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112-no.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112-no.html
deleted file mode 100644
index 685b7f70af..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112-no.html
+++ /dev/null
@@ -1,3 +0,0 @@
-Gariachin:
-Oh, no! This is not good, not good at all. My sincerest apologies -- I cannot tell you what happened in detail -- but I cannot teleport you to your destination at the moment. I'm terribly sorry for the inconvenience.
-
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112.html b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112.html
deleted file mode 100644
index b7af765dd9..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/32112.html
+++ /dev/null
@@ -1,5 +0,0 @@
-Gariachin:
-Welcome! I am Gariachin. I am entrusted with the teleportation of visitors to this island. It may sound strange to you, but I've come to love this island and respect its people. It is a precious place, housing the hope, wisdom and future of the Elroki tribe.
-I will transport you to the southern beach of the Primeval Plains. If you have the chance, will you send my regards to my friend, Orahochin?
-
-
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/ElrokiTeleporters.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/ElrokiTeleporters.java
deleted file mode 100644
index 5391ddc5db..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/ElrokiTeleporters/ElrokiTeleporters.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * 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 .
- */
-package ai.areas.PrimevalIsle.ElrokiTeleporters;
-
-import org.l2jmobius.gameserver.model.Location;
-import org.l2jmobius.gameserver.model.actor.Npc;
-import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
-
-import ai.AbstractNpcAI;
-
-/**
- * Elroki teleport AI.
- * @author Plim
- */
-public class ElrokiTeleporters extends AbstractNpcAI
-{
- // NPCs
- private static final int ORAHOCHIN = 32111;
- private static final int GARIACHIN = 32112;
- // Locations
- private static final Location TELEPORT_ORAHOCIN = new Location(4990, -1879, -3178);
- private static final Location TELEPORT_GARIACHIN = new Location(7557, -5513, -3221);
-
- private ElrokiTeleporters()
- {
- addFirstTalkId(ORAHOCHIN, GARIACHIN);
- addStartNpc(ORAHOCHIN, GARIACHIN);
- addTalkId(ORAHOCHIN, GARIACHIN);
- }
-
- @Override
- public String onTalk(Npc npc, PlayerInstance talker)
- {
- if (!talker.isInCombat())
- {
- talker.teleToLocation((npc.getId() == ORAHOCHIN) ? TELEPORT_ORAHOCIN : TELEPORT_GARIACHIN);
- }
- else
- {
- return npc.getId() + "-no.html";
- }
- return super.onTalk(npc, talker);
- }
-
- public static void main(String[] args)
- {
- new ElrokiTeleporters();
- }
-}
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/PrimevalIsle.java b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/PrimevalIsle.java
deleted file mode 100644
index 626ab27ef4..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/scripts/ai/areas/PrimevalIsle/PrimevalIsle.java
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * 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 .
- */
-package ai.areas.PrimevalIsle;
-
-import org.l2jmobius.commons.util.CommonUtil;
-import org.l2jmobius.gameserver.ai.CtrlIntention;
-import org.l2jmobius.gameserver.enums.ChatType;
-import org.l2jmobius.gameserver.geoengine.GeoEngine;
-import org.l2jmobius.gameserver.handler.IItemHandler;
-import org.l2jmobius.gameserver.handler.ItemHandler;
-import org.l2jmobius.gameserver.model.Location;
-import org.l2jmobius.gameserver.model.World;
-import org.l2jmobius.gameserver.model.actor.Attackable;
-import org.l2jmobius.gameserver.model.actor.Creature;
-import org.l2jmobius.gameserver.model.actor.Npc;
-import org.l2jmobius.gameserver.model.actor.Playable;
-import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
-import org.l2jmobius.gameserver.model.holders.SkillHolder;
-import org.l2jmobius.gameserver.model.items.instance.ItemInstance;
-import org.l2jmobius.gameserver.model.skills.Skill;
-import org.l2jmobius.gameserver.network.NpcStringId;
-import org.l2jmobius.gameserver.util.Util;
-
-import ai.AbstractNpcAI;
-
-/**
- * Primeval Isle AI.
- * @author St3eT
- */
-public class PrimevalIsle extends AbstractNpcAI
-{
- // NPC
- private static final int EGG = 18344; // Ancient Egg
- private static final int SAILREN = 29065; // Sailren
- private static final int ORNIT = 22742; // Ornithomimus
- private static final int DEINO = 22743; // Deinonychus
- private static final int[] SPRIGNANT =
- {
- 18345, // Sprigant (Anesthesia)
- 18346, // Sprigant (Deadly Poison)
- };
- private static final int[] MONSTERS =
- {
- 22196, // Velociraptor
- 22198, // Velociraptor
- 22200, // Ornithomimus
- 22202, // Ornithomimus
- 22203, // Deinonychus
- 22205, // Deinonychus
- 22208, // Pachycephalosaurus
- 22210, // Pachycephalosaurus
- 22211, // Wild Strider
- 22213, // Wild Strider
- 22223, // Velociraptor
- 22224, // Ornithomimus
- 22225, // Deinonychus
- 22226, // Pachycephalosaurus
- 22227, // Wild Strider
- 22742, // Ornithomimus
- 22743, // Deinonychus
- };
- private static final int[] TREX =
- {
- 22215, // Tyrannosaurus
- 22216, // Tyrannosaurus
- 22217, // Tyrannosaurus
- };
- private static final int[] VEGETABLE =
- {
- 22200, // Ornithomimus
- 22201, // Ornithomimus
- 22202, // Ornithomimus
- 22203, // Deinonychus
- 22204, // Deinonychus
- 22205, // Deinonychus
- 22224, // Ornithomimus
- 22225, // Deinonychus
- };
- // Item
- private static final int DEINONYCHUS = 14828; // Deinonychus Mesozoic Stone
- // Skill
- private static final SkillHolder ANESTHESIA = new SkillHolder(5085, 1); // Anesthesia
- private static final SkillHolder DEADLY_POISON = new SkillHolder(5086, 1); // Deadly Poison
- private static final SkillHolder SELFBUFF1 = new SkillHolder(5087, 1); // Berserk
- private static final SkillHolder SELFBUFF2 = new SkillHolder(5087, 2); // Berserk
- private static final SkillHolder LONGRANGEDMAGIC1 = new SkillHolder(5120, 1); // Stun
- private static final SkillHolder PHYSICALSPECIAL1 = new SkillHolder(5083, 4); // Stun
- private static final SkillHolder PHYSICALSPECIAL2 = new SkillHolder(5081, 4); // Silence
- private static final SkillHolder PHYSICALSPECIAL3 = new SkillHolder(5082, 4); // NPC Spinning, Slashing Trick
- private static final SkillHolder CREW_SKILL = new SkillHolder(6172, 1); // Presentation - Tyranno
- private static final SkillHolder INVIN_BUFF_ON = new SkillHolder(5225, 1); // Invincible
-
- private PrimevalIsle()
- {
- addSpawnId(TREX);
- addSpawnId(SPRIGNANT);
- addSpawnId(MONSTERS);
- addAggroRangeEnterId(TREX);
- addSpellFinishedId(TREX);
- addAttackId(EGG);
- addAttackId(TREX);
- addAttackId(MONSTERS);
- addKillId(EGG, SAILREN, DEINO, ORNIT);
- addSeeCreatureId(TREX);
- addSeeCreatureId(MONSTERS);
- }
-
- @Override
- public String onSpellFinished(Npc npc, PlayerInstance player, Skill skill)
- {
- if (skill.getId() == CREW_SKILL.getSkillId())
- {
- startQuestTimer("START_INVUL", 4000, npc, null);
- final Npc target = (Npc) npc.getTarget();
- if (target != null)
- {
- target.doDie(npc);
- }
- }
- if (npc.isInCombat())
- {
- final Attackable mob = (Attackable) npc;
- final Creature target = mob.getMostHated();
- if (((npc.getCurrentHp() / npc.getMaxHp()) * 100) < 60)
- {
- if (skill.getId() == SELFBUFF1.getSkillId())
- {
- npc.setScriptValue(3);
- if ((target != null))
- {
- npc.setTarget(target);
- mob.setRunning();
- mob.addDamageHate(target, 0, 555);
- mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
- }
- }
- }
- else if (((npc.getCurrentHp() / npc.getMaxHp()) * 100) < 30)
- {
- if (skill.getId() == SELFBUFF1.getSkillId())
- {
- npc.setScriptValue(1);
- if ((target != null))
- {
- npc.setTarget(target);
- mob.setRunning();
- mob.addDamageHate(target, 0, 555);
- mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
- }
- }
- else if (skill.getId() == SELFBUFF2.getSkillId())
- {
- npc.setScriptValue(5);
- if ((target != null))
- {
- npc.setTarget(target);
- mob.setRunning();
- mob.addDamageHate(target, 0, 555);
- mob.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
- }
- }
- }
- }
- return super.onSpellFinished(npc, player, skill);
- }
-
- @Override
- public String onAdvEvent(String event, Npc npc, PlayerInstance player)
- {
- switch (event)
- {
- case "USE_SKILL":
- {
- if ((npc != null) && !npc.isDead())
- {
- npc.doCast((npc.getId() == SPRIGNANT[0] ? ANESTHESIA.getSkill() : DEADLY_POISON.getSkill()));
- startQuestTimer("USE_SKILL", 15000, npc, null);
- }
- break;
- }
- case "GHOST_DESPAWN":
- {
- if ((npc != null) && !npc.isDead())
- {
- if (!npc.isInCombat())
- {
- npc.deleteMe();
- }
- else
- {
- startQuestTimer("GHOST_DESPAWN", 1800000, npc, null);
- }
- }
- break;
- }
- case "TREX_ATTACK":
- {
- if ((npc != null) && (player != null))
- {
- npc.setScriptValue(0);
- if (player.isInsideRadius3D(npc, 800))
- {
- npc.setTarget(player);
- npc.doCast(LONGRANGEDMAGIC1.getSkill());
- addAttackPlayerDesire(npc, player);
- }
- }
- break;
- }
- case "START_INVUL":
- {
- if ((npc != null) && !npc.isDead())
- {
- npc.doCast(INVIN_BUFF_ON.getSkill());
- startQuestTimer("START_INVUL_2", 30000, npc, null);
- }
- break;
- }
- case "START_INVUL_2":
- {
- if ((npc != null) && !npc.isDead())
- {
- INVIN_BUFF_ON.getSkill().applyEffects(npc, npc);
- }
- break;
- }
- }
- return super.onAdvEvent(event, npc, player);
- }
-
- @Override
- public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
- {
- if (CommonUtil.contains(MONSTERS, npc.getId()))
- {
- if (creature.isPlayer())
- {
- final Attackable mob = (Attackable) npc;
- final int ag_type = npc.getParameters().getInt("ag_type", 0);
- final int probPhysicalSpecial1 = npc.getParameters().getInt("ProbPhysicalSpecial1", 0);
- final int probPhysicalSpecial2 = npc.getParameters().getInt("ProbPhysicalSpecial2", 0);
- final SkillHolder physicalSpecial1 = npc.getParameters().getObject("PhysicalSpecial1", SkillHolder.class);
- final SkillHolder physicalSpecial2 = npc.getParameters().getObject("PhysicalSpecial2", SkillHolder.class);
-
- if (((getRandom(100) < 30) && (npc.getId() == DEINO)) || ((npc.getId() == ORNIT) && npc.isScriptValue(0)))
- {
- mob.clearAggroList();
- npc.setScriptValue(1);
- npc.setRunning();
-
- final int distance = 3000;
- final int heading = Util.calculateHeadingFrom(creature, npc);
- final double angle = Util.convertHeadingToDegree(heading);
- final double radian = Math.toRadians(angle);
- final double sin = Math.sin(radian);
- final double cos = Math.cos(radian);
- final int newX = (int) (npc.getX() + (cos * distance));
- final int newY = (int) (npc.getY() + (sin * distance));
- final Location loc = GeoEngine.getInstance().canMoveToTargetLoc(npc.getX(), npc.getY(), npc.getZ(), newX, newY, npc.getZ(), npc.getInstanceWorld());
- npc.getAI().setIntention(CtrlIntention.AI_INTENTION_MOVE_TO, loc, 0);
- }
- else if (ag_type == 1)
- {
- if (getRandom(100) <= (probPhysicalSpecial1 * npc.getVariables().getInt("SKILL_MULTIPLER")))
- {
- if (!npc.isSkillDisabled(physicalSpecial1.getSkill()))
- {
- npc.setTarget(creature);
- npc.doCast(physicalSpecial1.getSkill());
- }
- }
- else if ((getRandom(100) <= (probPhysicalSpecial2 * npc.getVariables().getInt("SKILL_MULTIPLER"))) && !npc.isSkillDisabled(physicalSpecial2.getSkill()))
- {
- npc.setTarget(creature);
- npc.doCast(physicalSpecial2.getSkill());
- }
- }
- }
- }
- else if (CommonUtil.contains(VEGETABLE, creature.getId()))
- {
- npc.setTarget(creature);
- npc.doCast(CREW_SKILL.getSkill());
- npc.setRunning();
- npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, creature);
- }
- return super.onSeeCreature(npc, creature, isSummon);
- }
-
- @Override
- public String onAggroRangeEnter(Npc npc, PlayerInstance player, boolean isSummon)
- {
- if (npc.isScriptValue(0))
- {
- npc.setScriptValue(1);
- npc.broadcastSay(ChatType.NPC_GENERAL, "?");
- ((Attackable) npc).clearAggroList();
- startQuestTimer("TREX_ATTACK", 6000, npc, player);
- }
- return super.onAggroRangeEnter(npc, player, isSummon);
- }
-
- @Override
- public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
- {
- if (npc.getId() == EGG)
- {
- if ((getRandom(100) <= 80) && npc.isScriptValue(0))
- {
- npc.setScriptValue(1);
- final Playable playable = isSummon ? attacker.getServitors().values().stream().findFirst().orElse(attacker.getPet()) : attacker;
- World.getInstance().forEachVisibleObjectInRange(npc, Attackable.class, 500, monster ->
- {
- if ((getRandomBoolean()))
- {
- addAttackPlayerDesire(monster, playable);
- }
- });
- }
- }
- else if (CommonUtil.contains(TREX, npc.getId()))
- {
- final Attackable mob = (Attackable) npc;
- final Creature target = mob.getMostHated();
-
- if (((npc.getCurrentHp() / npc.getMaxHp()) * 100) <= 30)
- {
- if (npc.isScriptValue(3))
- {
- if (!npc.isSkillDisabled(SELFBUFF1.getSkill()))
- {
- npc.doCast(SELFBUFF1.getSkill());
- }
- }
- else if (npc.isScriptValue(1) && !npc.isSkillDisabled(SELFBUFF2.getSkill()))
- {
- npc.doCast(SELFBUFF2.getSkill());
- }
- }
- else if ((((npc.getCurrentHp() / npc.getMaxHp()) * 100) <= 60) && (npc.isScriptValue(3)) && !npc.isSkillDisabled(SELFBUFF1.getSkill()))
- {
- npc.doCast(SELFBUFF1.getSkill());
- }
-
- if (Util.calculateDistance(npc, attacker, true, false) > 100)
- {
- if (!npc.isSkillDisabled(LONGRANGEDMAGIC1.getSkill()) && (getRandom(100) <= (10 * npc.getScriptValue())))
- {
- npc.setTarget(attacker);
- npc.doCast(LONGRANGEDMAGIC1.getSkill());
- }
- }
- else
- {
- if (!npc.isSkillDisabled(LONGRANGEDMAGIC1.getSkill()) && (getRandom(100) <= (10 * npc.getScriptValue())))
- {
- npc.setTarget(target);
- npc.doCast(LONGRANGEDMAGIC1.getSkill());
- }
- if (!npc.isSkillDisabled(PHYSICALSPECIAL1.getSkill()) && (getRandom(100) <= (5 * npc.getScriptValue())))
- {
- npc.setTarget(target);
- npc.doCast(PHYSICALSPECIAL1.getSkill());
- }
- if (!npc.isSkillDisabled(PHYSICALSPECIAL2.getSkill()) && (getRandom(100) <= (3 * npc.getScriptValue())))
- {
- npc.setTarget(target);
- npc.doCast(PHYSICALSPECIAL2.getSkill());
- }
- if (!npc.isSkillDisabled(PHYSICALSPECIAL3.getSkill()) && (getRandom(100) <= (5 * npc.getScriptValue())))
- {
- npc.setTarget(target);
- npc.doCast(PHYSICALSPECIAL3.getSkill());
- }
- }
- }
- else
- {
- Creature target = null;
- final int probPhysicalSpecial1 = npc.getParameters().getInt("ProbPhysicalSpecial1", 0);
- final int probPhysicalSpecial2 = npc.getParameters().getInt("ProbPhysicalSpecial2", 0);
- final SkillHolder selfRangeBuff1 = npc.getParameters().getObject("SelfRangeBuff1", SkillHolder.class);
- final SkillHolder physicalSpecial1 = npc.getParameters().getObject("PhysicalSpecial1", SkillHolder.class);
- final SkillHolder physicalSpecial2 = npc.getParameters().getObject("PhysicalSpecial2", SkillHolder.class);
-
- if (((npc.getCurrentHp() / npc.getMaxHp()) * 100) <= 50)
- {
- npc.getVariables().set("SKILL_MULTIPLER", 2);
- }
- else
- {
- npc.getVariables().set("SKILL_MULTIPLER", 1);
- }
-
- if ((((npc.getCurrentHp() / npc.getMaxHp()) * 100) <= 30) && (npc.getVariables().getInt("SELFBUFF_USED") == 0))
- {
- final Attackable mob = (Attackable) npc;
- target = mob.getMostHated();
- mob.clearAggroList();
- if (!npc.isSkillDisabled(selfRangeBuff1.getSkill()))
- {
- npc.getVariables().set("SELFBUFF_USED", 1);
- npc.doCast(selfRangeBuff1.getSkill());
- npc.setRunning();
- npc.getAI().setIntention(CtrlIntention.AI_INTENTION_ATTACK, target);
- }
- }
-
- if (target != null)
- {
- if ((getRandom(100) <= (probPhysicalSpecial1 * npc.getVariables().getInt("SKILL_MULTIPLER"))) && !npc.isSkillDisabled(physicalSpecial1.getSkill()))
- {
- npc.setTarget(target);
- npc.doCast(physicalSpecial1.getSkill());
- }
- if ((getRandom(100) <= (probPhysicalSpecial2 * npc.getVariables().getInt("SKILL_MULTIPLER"))) && !npc.isSkillDisabled(physicalSpecial2.getSkill()))
- {
- npc.setTarget(target);
- npc.doCast(physicalSpecial2.getSkill());
- }
- }
- }
- return super.onAttack(npc, attacker, damage, isSummon);
- }
-
- @Override
- public String onKill(Npc npc, PlayerInstance killer, boolean isSummon)
- {
- if ((npc.getId() == DEINO) || ((npc.getId() == ORNIT) && !npc.isScriptValue(1)))
- {
- return super.onKill(npc, killer, isSummon);
- }
- if ((npc.getId() == SAILREN) || (getRandom(100) < 3))
- {
- final PlayerInstance player = npc.getId() == SAILREN ? getRandomPartyMember(killer) : killer;
- if (player.isInventoryUnder80(false))
- {
- giveItems(player, DEINONYCHUS, 1);
- final ItemInstance summonItem = player.getInventory().getItemByItemId(DEINONYCHUS);
- final IItemHandler handler = ItemHandler.getInstance().getHandler(summonItem.getEtcItem());
- if ((handler != null) && !player.hasPet())
- {
- handler.useItem(player, summonItem, true);
- }
- showOnScreenMsg(player, NpcStringId.LIFE_STONE_FROM_THE_BEGINNING_ACQUIRED, 2, 6000);
- }
- else
- {
- showOnScreenMsg(player, NpcStringId.WHEN_INVENTORY_WEIGHT_NUMBER_ARE_MORE_THAN_80_THE_LIFE_STONE_FROM_THE_BEGINNING_CANNOT_BE_ACQUIRED, 2, 6000);
- }
- }
- return super.onKill(npc, killer, isSummon);
- }
-
- @Override
- public String onSpawn(Npc npc)
- {
- if (CommonUtil.contains(SPRIGNANT, npc.getId()))
- {
- cancelQuestTimer("USE_SKILL", npc, null);
- startQuestTimer("USE_SKILL", 15000, npc, null);
- }
- else if (CommonUtil.contains(TREX, npc.getId()))
- {
- final int collectGhost = npc.getParameters().getInt("CollectGhost", 0);
- final int collectDespawn = npc.getParameters().getInt("CollectGhostDespawnTime", 30);
-
- if (collectGhost == 1)
- {
- cancelQuestTimer("GHOST_DESPAWN", npc, null);
- startQuestTimer("GHOST_DESPAWN", collectDespawn * 60000, npc, null);
- }
- }
- else
- {
- npc.getVariables().set("SELFBUFF_USED", 0);
- npc.getVariables().set("SKILL_MULTIPLER", 1);
- }
- return super.onSpawn(npc);
- }
-
- public static void main(String[] args)
- {
- new PrimevalIsle();
- }
-}
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/PrimevalIsle.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/PrimevalIsle.xml
new file mode 100644
index 0000000000..76d339ac7b
--- /dev/null
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/PrimevalIsle.xml
@@ -0,0 +1,897 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/StormIsle.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/StormIsle.xml
index 4dccfa3cee..21ebe0bf7f 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/StormIsle.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/LimitedZones/StormIsle.xml
@@ -1171,6 +1171,22 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/Rune/PrimevalIsle.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/Rune/PrimevalIsle.xml
deleted file mode 100644
index d74bba492b..0000000000
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/spawns/Rune/PrimevalIsle.xml
+++ /dev/null
@@ -1,570 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/npcs/34500-34599.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/npcs/34500-34599.xml
index 4121043e7b..c8649447f2 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/npcs/34500-34599.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/stats/npcs/34500-34599.xml
@@ -499,7 +499,7 @@
-
+
ETC
FEMALE
diff --git a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/teleporters/others/PrimevalIsle.xml b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/teleporters/others/PrimevalIsle.xml
index 1e0776313d..2514ff8fbd 100644
--- a/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/teleporters/others/PrimevalIsle.xml
+++ b/L2J_Mobius_7.0_PreludeOfWar/dist/game/data/teleporters/others/PrimevalIsle.xml
@@ -1,8 +1,11 @@
-
+
-
+
+
+
+
\ No newline at end of file