Ramona AI rework.
Contributed by gigilo1968.
This commit is contained in:
parent
81a0e074e7
commit
823e36783c
@ -172,6 +172,19 @@ LindviorMaxPlayers = 112
|
||||
# Minimum players Level for enter to Lindvior. Retail: 99
|
||||
LindviorMinPlayerLvl = 99
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Ramona
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Interval time of Ramona. Value is hour. Range 1-480
|
||||
IntervalOfRamonaSpawn = 72
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfRamonaSpawn = 48
|
||||
|
||||
# Minimal count of players for enter to Ramona. Retail: 7
|
||||
RamonaMinPlayers = 7
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helios
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -18,9 +18,11 @@ package ai.bosses.Ramona;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
@ -32,8 +34,10 @@ import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestTimer;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
|
||||
import org.l2jmobius.gameserver.model.zone.type.NoSummonFriendZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
@ -44,9 +48,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static enum Status
|
||||
{
|
||||
ALIVE,
|
||||
IN_FIGHT,
|
||||
DEAD
|
||||
}
|
||||
|
||||
// NPC
|
||||
private static final int ROOM_CONTROL = 19642;
|
||||
private static final int INVISIBLE = 19643;
|
||||
private static final int MP_CONTROL = 19642;
|
||||
private static final int RAMONA = 19648;
|
||||
private static final int RAMONA_1 = 26141;
|
||||
private static final int RAMONA_2 = 26142;
|
||||
@ -58,58 +69,48 @@ public class Ramona extends AbstractNpcAI
|
||||
26146, // Shooter of the Queen
|
||||
26147 // Wizard of the Queen
|
||||
};
|
||||
// skill
|
||||
private static final Skill HYPER_MEGA_PLASMA_SHOT = SkillData.getInstance().getSkill(16641, 1);
|
||||
private static final Skill HYPER_MEGA_PLASMA_BRUST = SkillData.getInstance().getSkill(16642, 1);
|
||||
private static final Skill HIPER_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16643, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING = SkillData.getInstance().getSkill(16644, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING_MEGA_BRUST = SkillData.getInstance().getSkill(16645, 1);
|
||||
private static final Skill ULTRA_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16647, 1);
|
||||
private static final Skill[] RAMONA1_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING
|
||||
};
|
||||
private static final Skill[] RAMONA2_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST
|
||||
};
|
||||
private static final Skill[] RAMONA3_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST,
|
||||
HIPER_MEGA_TELEKINESS,
|
||||
ULTRA_MEGA_TELEKINESS
|
||||
};
|
||||
// Trigers
|
||||
private static final int FIRST_GENERATOR = 22230702;
|
||||
private static final int SECOND_GENERATOR = 22230704;
|
||||
private static final int THRID_GENERATOR = 22230706;
|
||||
private static final int FOURTH_GENERATOR = 22230708;
|
||||
// Locations
|
||||
private static final Location RAMONA_SPAWN_LOC_1 = new Location(78023, 172262, -10604, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC_2 = new Location(78012, 169922, -10467, 16383);
|
||||
private static final Location DEFAULT_LOC = new Location(78023, 172262, -10604, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC = new Location(78012, 169922, -10467, 16383);
|
||||
// Other
|
||||
private static final int ROOM_CONTROL_DOOR = 22230711;
|
||||
private static final NoSummonFriendZone ZONE = ZoneManager.getInstance().getZoneById(210108, NoSummonFriendZone.class);
|
||||
private static final int MIN_PLAYER_COUNT = 14;
|
||||
private static final EffectZone ZONE_ATTACK = ZoneManager.getInstance().getZoneById(200109, EffectZone.class);
|
||||
private static final EffectZone ZONE_DEFENCE = ZoneManager.getInstance().getZoneById(200110, EffectZone.class);
|
||||
private static final EffectZone ZONE_HP = ZoneManager.getInstance().getZoneById(200111, EffectZone.class);
|
||||
private static final EffectZone ZONE_ERADICATION = ZoneManager.getInstance().getZoneById(200112, EffectZone.class);
|
||||
// Vars
|
||||
private static DoorInstance _door;
|
||||
private static final String RAMONA_RESPAWN_VAR = "RamonaRespawn";
|
||||
private static Status _boss = Status.ALIVE;
|
||||
private static ArrayList<Npc> _minions = new ArrayList<>();
|
||||
private static int _bossStage;
|
||||
private static long _lastAction;
|
||||
private static Npc _invisible;
|
||||
private static Npc _ramona1;
|
||||
private static Npc _ramona2;
|
||||
private static Npc _ramona3;
|
||||
|
||||
private Ramona()
|
||||
{
|
||||
addStartNpc(ROOM_CONTROL);
|
||||
addKillId(ROOM_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(INVISIBLE);
|
||||
addAttackId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addStartNpc(MP_CONTROL);
|
||||
addKillId(MP_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(MP_CONTROL);
|
||||
addAttackId(MP_CONTROL, RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addSpawnId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
|
||||
final long temp = GlobalVariablesManager.getInstance().getLong(RAMONA_RESPAWN_VAR, 0) - System.currentTimeMillis();
|
||||
if (temp > 0)
|
||||
{
|
||||
_boss = Status.DEAD;
|
||||
startQuestTimer("RAMONA_UNLOCK", temp, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,16 +118,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "RAMONA_UNLOCK":
|
||||
{
|
||||
_boss = Status.ALIVE;
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MS":
|
||||
{
|
||||
addSpawn(ROOM_CONTROL, RAMONA_SPAWN_LOC_1, false, 600000, false);
|
||||
addSpawn(RAMONA, RAMONA_SPAWN_LOC_2, false, 600000, false);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (ZONE.getCharactersInside().size() >= Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.setIsInvul(false);
|
||||
cancelQuestTimers("SPAWN_MS");
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 5000, null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_1":
|
||||
{
|
||||
_bossStage = 1;
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, Npc.class, 3000, ramona ->
|
||||
{
|
||||
if (ramona.getId() == RAMONA)
|
||||
@ -134,91 +144,53 @@ public class Ramona extends AbstractNpcAI
|
||||
ramona.deleteMe();
|
||||
}
|
||||
});
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC_1, false, 1200000, true);
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null, true);
|
||||
startQuestTimer("RAMONA1_SKILL", 6000, _ramona1, null);
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC, false, 1200000, true);
|
||||
startQuestTimer("GENERATOR_1", getRandom(300000, 600000), null, null);
|
||||
startQuestTimer("GENERATOR_2", getRandom(900000, 1200000), null, null);
|
||||
startQuestTimer("GENERATOR_3", getRandom(1500000, 1800000), null, null);
|
||||
startQuestTimer("GENERATOR_4", getRandom(2100000, 2400000), null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case "RAMONA1_SKILL":
|
||||
case "GENERATOR_1":
|
||||
{
|
||||
if ((_bossStage == 1) && _ramona1.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA1_SKILLS[Rnd.get(RAMONA1_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona1.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FIRST_GENERATOR, true));
|
||||
ZONE_ATTACK.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS":
|
||||
case "GENERATOR_2":
|
||||
{
|
||||
_bossStage = 2;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA2_SKILL", 6000, _ramona2, null);
|
||||
ZONE.broadcastPacket(new OnEventTrigger(SECOND_GENERATOR, true));
|
||||
ZONE_DEFENCE.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "RAMONA2_SKILL":
|
||||
case "GENERATOR_3":
|
||||
{
|
||||
if ((_bossStage == 2) && _ramona2.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA2_SKILLS[Rnd.get(RAMONA2_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona2.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(THRID_GENERATOR, true));
|
||||
ZONE_HP.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS_1":
|
||||
case "GENERATOR_4":
|
||||
{
|
||||
_bossStage = 3;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA3_SKILL", 6000, _ramona3, null);
|
||||
break;
|
||||
}
|
||||
case "RAMONA3_SKILL":
|
||||
{
|
||||
if ((_bossStage == 3) && _ramona3.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA3_SKILLS[Rnd.get(RAMONA3_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona3.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FOURTH_GENERATOR, true));
|
||||
ZONE_ERADICATION.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "CHECK_ACTIVITY_TASK":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
// GrandBossManager.getInstance().setBossStatus(RAMONA, ALIVE);
|
||||
for (Creature creature : ZONE.getCharactersInside())
|
||||
for (Creature charInside : ZONE.getCharactersInside())
|
||||
{
|
||||
if (creature != null)
|
||||
if (charInside != null)
|
||||
{
|
||||
if (creature.isNpc())
|
||||
if (charInside.isNpc())
|
||||
{
|
||||
creature.deleteMe();
|
||||
charInside.deleteMe();
|
||||
}
|
||||
else if (creature.isPlayer())
|
||||
else if (charInside.isPlayer())
|
||||
{
|
||||
creature.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(creature, TeleportWhereType.TOWN));
|
||||
charInside.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(charInside, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,22 +198,12 @@ public class Ramona extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CANCEL_TIMERS":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 30000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "END_RAMONA":
|
||||
{
|
||||
_bossStage = 0;
|
||||
ZONE.oustAllPlayers();
|
||||
if (_ramona1 != null)
|
||||
{
|
||||
@ -266,9 +228,29 @@ public class Ramona extends AbstractNpcAI
|
||||
minion.deleteMe();
|
||||
}
|
||||
}
|
||||
if ((_boss == Status.ALIVE) || (_boss == Status.IN_FIGHT))
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
for (int i = FIRST_GENERATOR; i <= FOURTH_GENERATOR; i++)
|
||||
{
|
||||
ZONE.broadcastPacket(new OnEventTrigger(i, false));
|
||||
}
|
||||
ZONE_ATTACK.setEnabled(false);
|
||||
ZONE_DEFENCE.setEnabled(false);
|
||||
ZONE_HP.setEnabled(false);
|
||||
ZONE_ERADICATION.setEnabled(false);
|
||||
cancelQuestTimers("GENERATOR_1");
|
||||
cancelQuestTimers("GENERATOR_2");
|
||||
cancelQuestTimers("GENERATOR_3");
|
||||
cancelQuestTimers("GENERATOR_4");
|
||||
addSpawn(RAMONA, DEFAULT_LOC, false, 0, false);
|
||||
_minions.clear();
|
||||
_invisible.setScriptValue(0);
|
||||
_door.setTargetable(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -278,38 +260,61 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
double currentHp = (npc.getCurrentHp() / npc.getMaxHp()) * 100;
|
||||
switch (npc.getId())
|
||||
{
|
||||
case MP_CONTROL:
|
||||
{
|
||||
if (ZONE.getCharactersInside().size() < Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WHAT_S_UP_WITH_YOUR_EYES_YOU_NEED_MORE_ENERGY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_1:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 75)
|
||||
if (npc.getCurrentHpPercent() < 75)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_A);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona2.setCurrentHp(_ramona1.getCurrentHp());
|
||||
_ramona1.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS", 6000, _ramona2, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 50)
|
||||
if (npc.getCurrentHpPercent() < 50)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_B);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona3.setCurrentHp(_ramona2.getCurrentHp());
|
||||
_ramona2.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS_1", 6000, _ramona3, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if ((npc.getCurrentHpPercent() < 25) && npc.isScriptValue(2))
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -321,24 +326,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ROOM_CONTROL:
|
||||
case MP_CONTROL:
|
||||
{
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, Door ->
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, door ->
|
||||
{
|
||||
if (Door.getId() == ROOM_CONTROL_DOOR)
|
||||
if (door.getId() == ROOM_CONTROL_DOOR)
|
||||
{
|
||||
Door.closeMe();
|
||||
Door.setTargetable(false);
|
||||
_door = Door;
|
||||
door.closeMe();
|
||||
}
|
||||
});
|
||||
startQuestTimer("SPAWN_RAMONA_1", 5000, npc, null);
|
||||
startQuestTimer("SPAWN_RAMONA_1", 10000, npc, null);
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
notifyEvent("CANCEL_TIMERS", null, null);
|
||||
startQuestTimer("END_RAMONA", 300000, null, null);
|
||||
_boss = Status.DEAD;
|
||||
long respawnTime = (Config.RAMONA_SPAWN_INTERVAL + getRandom(-Config.RAMONA_SPAWN_RANDOM, Config.RAMONA_SPAWN_RANDOM)) * 3600000;
|
||||
GlobalVariablesManager.getInstance().set(RAMONA_RESPAWN_VAR, System.currentTimeMillis() + respawnTime);
|
||||
startQuestTimer("RAMONA_UNLOCK", respawnTime, null, null);
|
||||
startQuestTimer("END_RAMONA", 90000, null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -348,15 +354,35 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
|
||||
{
|
||||
if (creature.isPlayer() && npc.isScriptValue(0) && (ZONE.getCharactersInside().size() >= MIN_PLAYER_COUNT))
|
||||
npc.setIsInvul(true);
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null);
|
||||
npc.setScriptValue(1);
|
||||
_invisible = npc;
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null, true);
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case RAMONA_1:
|
||||
{
|
||||
_boss = Status.IN_FIGHT;
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Ramona();
|
||||
|
@ -1651,9 +1651,9 @@
|
||||
<race>HUMANOID</race>
|
||||
<sex>MALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="13945521" hpRegen="1824.56140350877" mp="50920" mpRegen="1925.92592592593" />
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<vitals hp="20949082.10169" hpRegen="436.263366" mp="83501.371" mpRegen="3.3" />
|
||||
<attack physical="295358.4152" magical="211816.358" random="30" critical="4.75" accuracy="4.75" attackSpeed="250" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="300" water="300" wind="300" earth="300" holy="250" dark="370"/>
|
||||
</attribute>
|
||||
@ -1662,6 +1662,11 @@
|
||||
<run ground="270" />
|
||||
</speed>
|
||||
</stats>
|
||||
<status attackable="true" />
|
||||
<collision>
|
||||
<radius normal="30" />
|
||||
<height normal="54" />
|
||||
</collision>
|
||||
<skillList>
|
||||
<skill id="4416" level="6" /> <!-- Humanoids -->
|
||||
<skill id="5467" level="1" /> <!-- Dark Attack -->
|
||||
@ -1779,10 +1784,6 @@
|
||||
<item id="40198" min="1" max="1" chance="0.03" /> <!-- Disassembly Recipe Pouch: Armor -->
|
||||
</lucky>
|
||||
</dropLists>
|
||||
<collision>
|
||||
<radius normal="30" />
|
||||
<height normal="54" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26125" level="104" type="Monster" name="Giant Atelia">
|
||||
<race>CONSTRUCT</race>
|
||||
@ -1918,7 +1919,6 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26131" level="101" type="RaidBoss" name="Isabella" title="Raid Boss">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<parameters>
|
||||
<minions name="Privates">
|
||||
<npc id="26132" count="2" respawnTime="360" weightPoint="1" />
|
||||
@ -1927,20 +1927,25 @@
|
||||
</parameters>
|
||||
<race>HUMANOID</race>
|
||||
<sex>FEMALE</sex>
|
||||
<acquire exp="54225186393" sp="130140121" raidPoints="30" />
|
||||
<acquire exp="57494325657" sp="137986036" raidPoints="30" />
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="8161846" hpRegen="1771.9298245614" mp="48616" mpRegen="1870.37037037037" />
|
||||
<vitals hp="27519758.98749" hpRegen="436.263366" mp="83501.371" mpRegen="3.3" />
|
||||
<attack physical="295358.4152" magical="211816.358" random="30" critical="4.75" accuracy="4.75" attackSpeed="250" type="SWORD" range="40" distance="80" width="120" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<speed>
|
||||
<walk ground="60" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="48095.2380952381" magical="8487.39495798319" critical="4" attackSpeed="253" range="40" />
|
||||
<defence physical="3740.74074074074" magical="2172.04301075269" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="WIND" value="430" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<status attackable="true" />
|
||||
<collision>
|
||||
<radius normal="24" />
|
||||
<height normal="67.5" />
|
||||
</collision>
|
||||
<skillList>
|
||||
<skill id="4416" level="6" /> <!-- Humanoids -->
|
||||
<skill id="5464" level="1" /> <!-- Wind Attack -->
|
||||
@ -2028,10 +2033,6 @@
|
||||
<item id="39629" min="2" max="2" chance="100" /> <!-- Fortune Pocket - Stage 1 -->
|
||||
</lucky>
|
||||
</dropLists>
|
||||
<collision>
|
||||
<radius normal="24" />
|
||||
<height normal="67.5" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26132" level="100" type="Monster" name="Croa" title="Raid Minion">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
@ -2258,7 +2259,15 @@
|
||||
<height normal="28.25" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26141" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<npc id="26141" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2267,8 +2276,8 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
@ -2279,6 +2288,9 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2290,8 +2302,17 @@
|
||||
<height normal="87" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26142" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<npc id="26142" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2300,14 +2321,22 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2320,20 +2349,34 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26143" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<skill name="Skill04_ID" id="16646" level="1" />
|
||||
<skill name="Skill04_ID" id="16647" level="1" />
|
||||
<param name="Skill01_Probablity" value="300" />
|
||||
<param name="Skill02_Probablity" value="300" />
|
||||
<param name="Skill03_Probablity" value="300" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
<param name="Skill05_Probablity" value="500" />
|
||||
<param name="Skill06_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<acquire exp="576969277248" sp="1153938597" raidPoints="300" />
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="27188512" hpRegen="1824.56140350877" mp="50920" mpRegen="1925.92592592593" />
|
||||
<vitals hp="40842816.910005" hpRegen="436.263366" mp="83501.371" mpRegen="3.3" />
|
||||
<speed>
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="300" water="300" wind="250" earth="370" holy="300" dark="300"/>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
@ -2341,12 +2384,23 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="14804" level="1" /> <!-- Damage Reflection Attack Resistance -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
<skill id="16646" level="1"/> <!-- Hyper Mega Telekinesis -->
|
||||
<skill id="16647" level="1"/> <!-- Ultra Mega Telekinesis -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
<clan>RAMONA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
<dropLists>
|
||||
<drop>
|
||||
<item id="47244" min="1" max="1" chance="50.91" /> <!-- Ramona's Fancy Earrings -->
|
||||
@ -2432,12 +2486,14 @@
|
||||
<item id="40198" min="1" max="1" chance="2.568" /> <!-- Disassembly Recipe Pouch: Armor -->
|
||||
</lucky>
|
||||
</dropLists>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26144" level="104" type="Monster" name="Dancer of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16681" level="1" />
|
||||
<skill name="Skill02_ID" id="16677" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2460,6 +2516,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16681" level="1" /> <!-- For the Queen -->
|
||||
<skill id="16677" level="1" /> <!-- Hyper Power -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2472,6 +2530,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26145" level="104" type="Monster" name="Commander of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16682" level="1" />
|
||||
<skill name="Skill02_ID" id="16680" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2494,6 +2558,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16682" level="1" /> <!-- Doom Hammer -->
|
||||
<skill id="16680" level="1" /> <!-- Commander Aggression Aura -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2506,6 +2572,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26146" level="104" type="Monster" name="Shooter of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16683" level="1" />
|
||||
<skill name="Skill02_ID" id="16684" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2528,6 +2600,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16683" level="1" /> <!-- Stun Shot -->
|
||||
<skill id="16684" level="1" /> <!-- Multi Shot -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2540,6 +2614,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26147" level="104" type="Monster" name="Wizard of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16685" level="1" />
|
||||
<skill name="Skill02_ID" id="16686" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2562,6 +2642,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16685" level="1" /> <!-- Ultra Plasma Ball -->
|
||||
<skill id="16686" level="1" /> <!-- Ultra Plasma Wave -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2601,8 +2683,12 @@
|
||||
<walk ground="55" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49047.619047619" magical="8655.46218487395" critical="4" attackSpeed="398" range="40" />
|
||||
<defence physical="3814.81481481481" magical="2215.05376344086" />
|
||||
<attack physical="256235.619047619" magical="43275.46218487395" critical="4.75" accuracy="4.75" attackSpeed="398" range="40" />
|
||||
<defence physical="19070.81481481481" magical="11075.05376344086" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
|
@ -461,30 +461,76 @@
|
||||
<skill id="16731" toLevel="1" name="Leaking Magic - Attack">
|
||||
<!-- The physical attack and magic attack of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1059</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16732" toLevel="1" name="Leaking Magic - Defense">
|
||||
<!-- The physical defense and magic defense of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1478</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16733" toLevel="1" name="Leaking Magic - HP">
|
||||
<!-- The HP regen of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1044</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="HpRegen">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16734" toLevel="1" name="Leaking Magic - Eradication">
|
||||
<!-- The Queen and her minions continuously receive massive damage fur to the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1108</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<isDebuff>1</isDebuff>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<conditions>
|
||||
<condition name="OpTargetPc" /> <!-- TODO -->
|
||||
<condition name="OpResurrection" /> <!-- TODO -->
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="BlockResurrection" /> <!-- TODO -->
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16735" toLevel="10" name="Inherent Abilities - Blackbird Clan Talisman">
|
||||
<!-- Damage received from Demons -$s1. -->
|
||||
|
@ -2261,4 +2261,44 @@
|
||||
<node X="-14188" Y="254493" />
|
||||
<node X="-14650" Y="254393" />
|
||||
</zone>
|
||||
<!-- Ramona -->
|
||||
<zone name="ramona_magic_attack" id="200109" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16731-1;" /> <!-- Leaking Magic - Attack -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_defence" id="200110" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16732-1;" /> <!-- Leaking Magic - Defense -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200111" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16733-1;" /> <!-- Leaking Magic - HP -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200112" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="true"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16734-1;" /> <!-- eaking Magic - Eradication -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
</list>
|
@ -187,7 +187,7 @@
|
||||
<zone name="Heart_Trasken_Zone" id="12109" type="NoSummonFriendZone" shape="Cylinder" minZ="-16000" maxZ="16000" rad="2500">
|
||||
<node X="88110" Y="-173795" />
|
||||
</zone>
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10050" rad="3000">
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="Helios_Zone" id="210109" type="NoSummonFriendZone" shape="Cylinder" minZ="3400" maxZ="3600" rad="3100">
|
||||
|
0
L2J_Mobius_3.0_Helios/dist/login/log/error0.log
vendored
Normal file
0
L2J_Mobius_3.0_Helios/dist/login/log/error0.log
vendored
Normal file
15
L2J_Mobius_3.0_Helios/dist/login/log/java0.log
vendored
Normal file
15
L2J_Mobius_3.0_Helios/dist/login/log/java0.log
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
2019.10.04 12:09:26,224 INFO 1 org.l2jmobius.commons.database.DatabaseFactory Database: Initialized.
|
||||
2019.10.04 12:09:26,251 INFO 1 org.l2jmobius.loginserver.LoginController Loading LoginController...
|
||||
2019.10.04 12:09:27,294 INFO 1 org.l2jmobius.loginserver.LoginController Cached 10 KeyPairs for RSA communication.
|
||||
2019.10.04 12:09:27,402 INFO 1 org.l2jmobius.loginserver.GameServerTable Loaded 127 server names.
|
||||
2019.10.04 12:09:27,412 INFO 1 org.l2jmobius.loginserver.GameServerTable Loaded 1 registered Game Servers.
|
||||
2019.10.04 12:09:27,540 INFO 1 org.l2jmobius.loginserver.GameServerTable Cached 10 RSA keys for Game Server communication.
|
||||
2019.10.04 12:09:27,549 INFO 1 org.l2jmobius.loginserver.LoginServer Loaded 2 IP Bans.
|
||||
2019.10.04 12:09:27,550 INFO 1 org.l2jmobius.loginserver.LoginServer Listening for GameServers on 127.0.0.1:9014
|
||||
2019.10.04 12:09:27,884 INFO 1 org.l2jmobius.loginserver.network.ClientNetworkManager ClientNetworkManager: Listening on 0.0.0.0:2106
|
||||
2019.10.04 12:10:49,782 INFO 31 org.l2jmobius.loginserver.GameServerThread Updated Gameserver [2] Sieghardt IP's:
|
||||
2019.10.04 12:10:49,784 INFO 31 org.l2jmobius.loginserver.GameServerThread 127.0.0.1/127.0.0.0/8
|
||||
2019.10.04 12:10:49,785 INFO 31 org.l2jmobius.loginserver.GameServerThread 192.168.1.4/192.168.1.0/24
|
||||
2019.10.04 12:10:49,785 INFO 31 org.l2jmobius.loginserver.GameServerThread 178.59.8.209/0.0.0.0/0
|
||||
2019.10.04 12:11:09,001 INFO 31 org.l2jmobius.loginserver.GameServerThread GameServer [2] Sieghardt: Connection lost: Connection reset
|
||||
2019.10.04 12:11:09,001 INFO 31 org.l2jmobius.loginserver.GameServerThread Server [2] Sieghardt is now set as disconnected.
|
@ -916,6 +916,11 @@ public class Config
|
||||
public static int HELIOS_MIN_PLAYER;
|
||||
public static int HELIOS_MIN_PLAYER_LVL;
|
||||
|
||||
// Ramona
|
||||
public static int RAMONA_SPAWN_INTERVAL;
|
||||
public static int RAMONA_SPAWN_RANDOM;
|
||||
public static int RAMONA_MIN_PLAYER;
|
||||
|
||||
// Gracia Seeds Settings
|
||||
public static int SOD_TIAT_KILL_COUNT;
|
||||
public static long SOD_STAGE_2_LENGTH;
|
||||
@ -2410,6 +2415,10 @@ public class Config
|
||||
HELIOS_MIN_PLAYER = GrandBossSettings.getInt("HeliosMinPlayers", 70);
|
||||
HELIOS_MIN_PLAYER_LVL = GrandBossSettings.getInt("HeliosMinPlayerLvl", 102);
|
||||
|
||||
RAMONA_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfRamonaSpawn", 72);
|
||||
RAMONA_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfRamonaSpawn", 48);
|
||||
RAMONA_MIN_PLAYER = GrandBossSettings.getInt("RamonaMinPlayers", 7);
|
||||
|
||||
// Gracia Seeds
|
||||
final PropertiesParser GraciaSeedsSettings = new PropertiesParser(GRACIASEEDS_CONFIG_FILE);
|
||||
|
||||
|
@ -172,6 +172,19 @@ LindviorMaxPlayers = 112
|
||||
# Minimum players Level for enter to Lindvior. Retail: 99
|
||||
LindviorMinPlayerLvl = 99
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Ramona
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Interval time of Ramona. Value is hour. Range 1-480
|
||||
IntervalOfRamonaSpawn = 72
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfRamonaSpawn = 48
|
||||
|
||||
# Minimal count of players for enter to Ramona. Retail: 7
|
||||
RamonaMinPlayers = 7
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helios
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -18,9 +18,11 @@ package ai.bosses.Ramona;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
@ -32,8 +34,10 @@ import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestTimer;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
|
||||
import org.l2jmobius.gameserver.model.zone.type.NoSummonFriendZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
@ -44,9 +48,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static enum Status
|
||||
{
|
||||
ALIVE,
|
||||
IN_FIGHT,
|
||||
DEAD
|
||||
}
|
||||
|
||||
// NPC
|
||||
private static final int ROOM_CONTROL = 19642;
|
||||
private static final int INVISIBLE = 19643;
|
||||
private static final int MP_CONTROL = 19642;
|
||||
private static final int RAMONA = 19648;
|
||||
private static final int RAMONA_1 = 26141;
|
||||
private static final int RAMONA_2 = 26142;
|
||||
@ -58,58 +69,48 @@ public class Ramona extends AbstractNpcAI
|
||||
26146, // Shooter of the Queen
|
||||
26147 // Wizard of the Queen
|
||||
};
|
||||
// skill
|
||||
private static final Skill HYPER_MEGA_PLASMA_SHOT = SkillData.getInstance().getSkill(16641, 1);
|
||||
private static final Skill HYPER_MEGA_PLASMA_BRUST = SkillData.getInstance().getSkill(16642, 1);
|
||||
private static final Skill HIPER_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16643, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING = SkillData.getInstance().getSkill(16644, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING_MEGA_BRUST = SkillData.getInstance().getSkill(16645, 1);
|
||||
private static final Skill ULTRA_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16647, 1);
|
||||
private static final Skill[] RAMONA1_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING
|
||||
};
|
||||
private static final Skill[] RAMONA2_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST
|
||||
};
|
||||
private static final Skill[] RAMONA3_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST,
|
||||
HIPER_MEGA_TELEKINESS,
|
||||
ULTRA_MEGA_TELEKINESS
|
||||
};
|
||||
// Trigers
|
||||
private static final int FIRST_GENERATOR = 22230702;
|
||||
private static final int SECOND_GENERATOR = 22230704;
|
||||
private static final int THRID_GENERATOR = 22230706;
|
||||
private static final int FOURTH_GENERATOR = 22230708;
|
||||
// Locations
|
||||
private static final Location RAMONA_SPAWN_LOC_1 = new Location(78023, 172262, -10604, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC_2 = new Location(78012, 169922, -10467, 16383);
|
||||
private static final Location DEFAULT_LOC = new Location(78023, 172262, -10604, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC = new Location(78012, 169922, -10467, 16383);
|
||||
// Other
|
||||
private static final int ROOM_CONTROL_DOOR = 22230711;
|
||||
private static final NoSummonFriendZone ZONE = ZoneManager.getInstance().getZoneById(210108, NoSummonFriendZone.class);
|
||||
private static final int MIN_PLAYER_COUNT = 14;
|
||||
private static final EffectZone ZONE_ATTACK = ZoneManager.getInstance().getZoneById(200109, EffectZone.class);
|
||||
private static final EffectZone ZONE_DEFENCE = ZoneManager.getInstance().getZoneById(200110, EffectZone.class);
|
||||
private static final EffectZone ZONE_HP = ZoneManager.getInstance().getZoneById(200111, EffectZone.class);
|
||||
private static final EffectZone ZONE_ERADICATION = ZoneManager.getInstance().getZoneById(200112, EffectZone.class);
|
||||
// Vars
|
||||
private static DoorInstance _door;
|
||||
private static final String RAMONA_RESPAWN_VAR = "RamonaRespawn";
|
||||
private static Status _boss = Status.ALIVE;
|
||||
private static ArrayList<Npc> _minions = new ArrayList<>();
|
||||
private static int _bossStage;
|
||||
private static long _lastAction;
|
||||
private static Npc _invisible;
|
||||
private static Npc _ramona1;
|
||||
private static Npc _ramona2;
|
||||
private static Npc _ramona3;
|
||||
|
||||
private Ramona()
|
||||
{
|
||||
addStartNpc(ROOM_CONTROL);
|
||||
addKillId(ROOM_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(INVISIBLE);
|
||||
addAttackId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addStartNpc(MP_CONTROL);
|
||||
addKillId(MP_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(MP_CONTROL);
|
||||
addAttackId(MP_CONTROL, RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addSpawnId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
|
||||
final long temp = GlobalVariablesManager.getInstance().getLong(RAMONA_RESPAWN_VAR, 0) - System.currentTimeMillis();
|
||||
if (temp > 0)
|
||||
{
|
||||
_boss = Status.DEAD;
|
||||
startQuestTimer("RAMONA_UNLOCK", temp, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,16 +118,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "RAMONA_UNLOCK":
|
||||
{
|
||||
_boss = Status.ALIVE;
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MS":
|
||||
{
|
||||
addSpawn(ROOM_CONTROL, RAMONA_SPAWN_LOC_1, false, 600000, false);
|
||||
addSpawn(RAMONA, RAMONA_SPAWN_LOC_2, false, 600000, false);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (ZONE.getCharactersInside().size() >= Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.setIsInvul(false);
|
||||
cancelQuestTimers("SPAWN_MS");
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 5000, null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_1":
|
||||
{
|
||||
_bossStage = 1;
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, Npc.class, 3000, ramona ->
|
||||
{
|
||||
if (ramona.getId() == RAMONA)
|
||||
@ -134,91 +144,53 @@ public class Ramona extends AbstractNpcAI
|
||||
ramona.deleteMe();
|
||||
}
|
||||
});
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC_1, false, 1200000, true);
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null, true);
|
||||
startQuestTimer("RAMONA1_SKILL", 6000, _ramona1, null);
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC, false, 1200000, true);
|
||||
startQuestTimer("GENERATOR_1", getRandom(300000, 600000), null, null);
|
||||
startQuestTimer("GENERATOR_2", getRandom(900000, 1200000), null, null);
|
||||
startQuestTimer("GENERATOR_3", getRandom(1500000, 1800000), null, null);
|
||||
startQuestTimer("GENERATOR_4", getRandom(2100000, 2400000), null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case "RAMONA1_SKILL":
|
||||
case "GENERATOR_1":
|
||||
{
|
||||
if ((_bossStage == 1) && _ramona1.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA1_SKILLS[Rnd.get(RAMONA1_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona1.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FIRST_GENERATOR, true));
|
||||
ZONE_ATTACK.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS":
|
||||
case "GENERATOR_2":
|
||||
{
|
||||
_bossStage = 2;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA2_SKILL", 6000, _ramona2, null);
|
||||
ZONE.broadcastPacket(new OnEventTrigger(SECOND_GENERATOR, true));
|
||||
ZONE_DEFENCE.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "RAMONA2_SKILL":
|
||||
case "GENERATOR_3":
|
||||
{
|
||||
if ((_bossStage == 2) && _ramona2.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA2_SKILLS[Rnd.get(RAMONA2_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona2.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(THRID_GENERATOR, true));
|
||||
ZONE_HP.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS_1":
|
||||
case "GENERATOR_4":
|
||||
{
|
||||
_bossStage = 3;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA3_SKILL", 6000, _ramona3, null);
|
||||
break;
|
||||
}
|
||||
case "RAMONA3_SKILL":
|
||||
{
|
||||
if ((_bossStage == 3) && _ramona3.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA3_SKILLS[Rnd.get(RAMONA3_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona3.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FOURTH_GENERATOR, true));
|
||||
ZONE_ERADICATION.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "CHECK_ACTIVITY_TASK":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
// GrandBossManager.getInstance().setBossStatus(RAMONA, ALIVE);
|
||||
for (Creature creature : ZONE.getCharactersInside())
|
||||
for (Creature charInside : ZONE.getCharactersInside())
|
||||
{
|
||||
if (creature != null)
|
||||
if (charInside != null)
|
||||
{
|
||||
if (creature.isNpc())
|
||||
if (charInside.isNpc())
|
||||
{
|
||||
creature.deleteMe();
|
||||
charInside.deleteMe();
|
||||
}
|
||||
else if (creature.isPlayer())
|
||||
else if (charInside.isPlayer())
|
||||
{
|
||||
creature.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(creature, TeleportWhereType.TOWN));
|
||||
charInside.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(charInside, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,22 +198,12 @@ public class Ramona extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CANCEL_TIMERS":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 30000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "END_RAMONA":
|
||||
{
|
||||
_bossStage = 0;
|
||||
ZONE.oustAllPlayers();
|
||||
if (_ramona1 != null)
|
||||
{
|
||||
@ -266,9 +228,29 @@ public class Ramona extends AbstractNpcAI
|
||||
minion.deleteMe();
|
||||
}
|
||||
}
|
||||
if ((_boss == Status.ALIVE) || (_boss == Status.IN_FIGHT))
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
for (int i = FIRST_GENERATOR; i <= FOURTH_GENERATOR; i++)
|
||||
{
|
||||
ZONE.broadcastPacket(new OnEventTrigger(i, false));
|
||||
}
|
||||
ZONE_ATTACK.setEnabled(false);
|
||||
ZONE_DEFENCE.setEnabled(false);
|
||||
ZONE_HP.setEnabled(false);
|
||||
ZONE_ERADICATION.setEnabled(false);
|
||||
cancelQuestTimers("GENERATOR_1");
|
||||
cancelQuestTimers("GENERATOR_2");
|
||||
cancelQuestTimers("GENERATOR_3");
|
||||
cancelQuestTimers("GENERATOR_4");
|
||||
addSpawn(RAMONA, DEFAULT_LOC, false, 0, false);
|
||||
_minions.clear();
|
||||
_invisible.setScriptValue(0);
|
||||
_door.setTargetable(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -278,38 +260,61 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
double currentHp = (npc.getCurrentHp() / npc.getMaxHp()) * 100;
|
||||
switch (npc.getId())
|
||||
{
|
||||
case MP_CONTROL:
|
||||
{
|
||||
if (ZONE.getCharactersInside().size() < Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WHAT_S_UP_WITH_YOUR_EYES_YOU_NEED_MORE_ENERGY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_1:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 75)
|
||||
if (npc.getCurrentHpPercent() < 75)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_A);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona2.setCurrentHp(_ramona1.getCurrentHp());
|
||||
_ramona1.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS", 6000, _ramona2, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 50)
|
||||
if (npc.getCurrentHpPercent() < 50)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_B);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona3.setCurrentHp(_ramona2.getCurrentHp());
|
||||
_ramona2.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS_1", 6000, _ramona3, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if ((npc.getCurrentHpPercent() < 25) && npc.isScriptValue(2))
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -321,24 +326,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ROOM_CONTROL:
|
||||
case MP_CONTROL:
|
||||
{
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, Door ->
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, door ->
|
||||
{
|
||||
if (Door.getId() == ROOM_CONTROL_DOOR)
|
||||
if (door.getId() == ROOM_CONTROL_DOOR)
|
||||
{
|
||||
Door.closeMe();
|
||||
Door.setTargetable(false);
|
||||
_door = Door;
|
||||
door.closeMe();
|
||||
}
|
||||
});
|
||||
startQuestTimer("SPAWN_RAMONA_1", 5000, npc, null);
|
||||
startQuestTimer("SPAWN_RAMONA_1", 10000, npc, null);
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
notifyEvent("CANCEL_TIMERS", null, null);
|
||||
startQuestTimer("END_RAMONA", 300000, null, null);
|
||||
_boss = Status.DEAD;
|
||||
long respawnTime = (Config.RAMONA_SPAWN_INTERVAL + getRandom(-Config.RAMONA_SPAWN_RANDOM, Config.RAMONA_SPAWN_RANDOM)) * 3600000;
|
||||
GlobalVariablesManager.getInstance().set(RAMONA_RESPAWN_VAR, System.currentTimeMillis() + respawnTime);
|
||||
startQuestTimer("RAMONA_UNLOCK", respawnTime, null, null);
|
||||
startQuestTimer("END_RAMONA", 90000, null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -348,15 +354,35 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
|
||||
{
|
||||
if (creature.isPlayer() && npc.isScriptValue(0) && (ZONE.getCharactersInside().size() >= MIN_PLAYER_COUNT))
|
||||
npc.setIsInvul(true);
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null);
|
||||
npc.setScriptValue(1);
|
||||
_invisible = npc;
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null, true);
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case RAMONA_1:
|
||||
{
|
||||
_boss = Status.IN_FIGHT;
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Ramona();
|
||||
|
@ -2497,7 +2497,15 @@
|
||||
<height normal="47.5" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26141" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<npc id="26141" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2506,8 +2514,8 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
@ -2518,6 +2526,9 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2529,8 +2540,17 @@
|
||||
<height normal="87" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26142" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<npc id="26142" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2539,14 +2559,22 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2559,20 +2587,34 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26143" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<skill name="Skill04_ID" id="16646" level="1" />
|
||||
<skill name="Skill04_ID" id="16647" level="1" />
|
||||
<param name="Skill01_Probablity" value="300" />
|
||||
<param name="Skill02_Probablity" value="300" />
|
||||
<param name="Skill03_Probablity" value="300" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
<param name="Skill05_Probablity" value="500" />
|
||||
<param name="Skill06_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<acquire exp="576969277248" sp="1153938597" raidPoints="300" />
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="27188512" hpRegen="1824.56140350877" mp="50920" mpRegen="1925.92592592593" />
|
||||
<vitals hp="40842816.910005" hpRegen="436.263366" mp="83501.371" mpRegen="3.3" />
|
||||
<speed>
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="300" water="300" wind="250" earth="370" holy="300" dark="300"/>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
@ -2580,12 +2622,23 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="14804" level="10" /> <!-- Damage Reflection Attack Resistance -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
<skill id="16646" level="1"/> <!-- Hyper Mega Telekinesis -->
|
||||
<skill id="16647" level="1"/> <!-- Ultra Mega Telekinesis -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
<clan>RAMONA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
<dropLists>
|
||||
<drop>
|
||||
<item id="47244" min="1" max="1" chance="50.91" /> <!-- Ramona's Fancy Earrings -->
|
||||
@ -2671,12 +2724,14 @@
|
||||
<item id="40198" min="1" max="1" chance="2.568" /> <!-- Disassembly Recipe Pouch: Armor -->
|
||||
</lucky>
|
||||
</dropLists>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26144" level="104" type="Monster" name="Dancer of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16681" level="1" />
|
||||
<skill name="Skill02_ID" id="16677" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2699,6 +2754,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16681" level="1" /> <!-- For the Queen -->
|
||||
<skill id="16677" level="1" /> <!-- Hyper Power -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2711,6 +2768,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26145" level="104" type="Monster" name="Commander of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16682" level="1" />
|
||||
<skill name="Skill02_ID" id="16680" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2733,6 +2796,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16682" level="1" /> <!-- Doom Hammer -->
|
||||
<skill id="16680" level="1" /> <!-- Commander Aggression Aura -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2745,6 +2810,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26146" level="104" type="Monster" name="Shooter of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16683" level="1" />
|
||||
<skill name="Skill02_ID" id="16684" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2767,6 +2838,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16683" level="1" /> <!-- Stun Shot -->
|
||||
<skill id="16684" level="1" /> <!-- Multi Shot -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2779,6 +2852,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26147" level="104" type="Monster" name="Wizard of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16685" level="1" />
|
||||
<skill name="Skill02_ID" id="16686" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2801,6 +2880,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16685" level="1" /> <!-- Ultra Plasma Ball -->
|
||||
<skill id="16686" level="1" /> <!-- Ultra Plasma Wave -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2840,8 +2921,12 @@
|
||||
<walk ground="55" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49047.619047619" magical="8655.46218487395" critical="4" attackSpeed="398" range="40" />
|
||||
<defence physical="3814.81481481481" magical="2215.05376344086" />
|
||||
<attack physical="256235.619047619" magical="43275.46218487395" critical="4.75" accuracy="4.75" attackSpeed="398" range="40" />
|
||||
<defence physical="19070.81481481481" magical="11075.05376344086" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
|
@ -461,30 +461,76 @@
|
||||
<skill id="16731" toLevel="1" name="Leaking Magic - Attack">
|
||||
<!-- The physical attack and magic attack of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1059</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16732" toLevel="1" name="Leaking Magic - Defense">
|
||||
<!-- The physical defense and magic defense of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1478</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16733" toLevel="1" name="Leaking Magic - HP">
|
||||
<!-- The HP regen of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1044</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="HpRegen">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16734" toLevel="1" name="Leaking Magic - Eradication">
|
||||
<!-- The Queen and her minions continuously receive massive damage fur to the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1108</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<isDebuff>1</isDebuff>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<conditions>
|
||||
<condition name="OpTargetPc" /> <!-- TODO -->
|
||||
<condition name="OpResurrection" /> <!-- TODO -->
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="BlockResurrection" /> <!-- TODO -->
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16735" toLevel="10" name="Inherent Abilities - Blackbird Clan Talisman">
|
||||
<!-- Damage received from Demons -$s1. -->
|
||||
|
@ -2261,4 +2261,44 @@
|
||||
<node X="-14188" Y="254493" />
|
||||
<node X="-14650" Y="254393" />
|
||||
</zone>
|
||||
<!-- Ramona -->
|
||||
<zone name="ramona_magic_attack" id="200109" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16731-1;" /> <!-- Leaking Magic - Attack -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_defence" id="200110" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16732-1;" /> <!-- Leaking Magic - Defense -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200111" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16733-1;" /> <!-- Leaking Magic - HP -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200112" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="true"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16734-1;" /> <!-- eaking Magic - Eradication -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
</list>
|
@ -187,7 +187,7 @@
|
||||
<zone name="Heart_Trasken_Zone" id="12109" type="NoSummonFriendZone" shape="Cylinder" minZ="-16000" maxZ="16000" rad="2500">
|
||||
<node X="88110" Y="-173795" />
|
||||
</zone>
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10050" rad="3000">
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="Helios_Zone" id="210109" type="NoSummonFriendZone" shape="Cylinder" minZ="3400" maxZ="3600" rad="3100">
|
||||
|
@ -903,6 +903,11 @@ public class Config
|
||||
public static int HELIOS_MIN_PLAYER;
|
||||
public static int HELIOS_MIN_PLAYER_LVL;
|
||||
|
||||
// Ramona
|
||||
public static int RAMONA_SPAWN_INTERVAL;
|
||||
public static int RAMONA_SPAWN_RANDOM;
|
||||
public static int RAMONA_MIN_PLAYER;
|
||||
|
||||
// Gracia Seeds Settings
|
||||
public static int SOD_TIAT_KILL_COUNT;
|
||||
public static long SOD_STAGE_2_LENGTH;
|
||||
@ -2384,6 +2389,10 @@ public class Config
|
||||
HELIOS_MIN_PLAYER = GrandBossSettings.getInt("HeliosMinPlayers", 70);
|
||||
HELIOS_MIN_PLAYER_LVL = GrandBossSettings.getInt("HeliosMinPlayerLvl", 102);
|
||||
|
||||
RAMONA_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfRamonaSpawn", 72);
|
||||
RAMONA_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfRamonaSpawn", 48);
|
||||
RAMONA_MIN_PLAYER = GrandBossSettings.getInt("RamonaMinPlayers", 7);
|
||||
|
||||
// Gracia Seeds
|
||||
final PropertiesParser GraciaSeedsSettings = new PropertiesParser(GRACIASEEDS_CONFIG_FILE);
|
||||
|
||||
|
@ -172,6 +172,19 @@ LindviorMaxPlayers = 112
|
||||
# Minimum players Level for enter to Lindvior. Retail: 99
|
||||
LindviorMinPlayerLvl = 99
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Ramona
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Interval time of Ramona. Value is hour. Range 1-480
|
||||
IntervalOfRamonaSpawn = 72
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfRamonaSpawn = 48
|
||||
|
||||
# Minimal count of players for enter to Ramona. Retail: 7
|
||||
RamonaMinPlayers = 7
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helios
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -18,9 +18,11 @@ package ai.bosses.Ramona;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
@ -32,8 +34,10 @@ import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestTimer;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
|
||||
import org.l2jmobius.gameserver.model.zone.type.NoSummonFriendZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
@ -44,9 +48,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static enum Status
|
||||
{
|
||||
ALIVE,
|
||||
IN_FIGHT,
|
||||
DEAD
|
||||
}
|
||||
|
||||
// NPC
|
||||
private static final int ROOM_CONTROL = 19642;
|
||||
private static final int INVISIBLE = 19643;
|
||||
private static final int MP_CONTROL = 19642;
|
||||
private static final int RAMONA = 19648;
|
||||
private static final int RAMONA_1 = 26141;
|
||||
private static final int RAMONA_2 = 26142;
|
||||
@ -58,58 +69,48 @@ public class Ramona extends AbstractNpcAI
|
||||
26146, // Shooter of the Queen
|
||||
26147 // Wizard of the Queen
|
||||
};
|
||||
// skill
|
||||
private static final Skill HYPER_MEGA_PLASMA_SHOT = SkillData.getInstance().getSkill(16641, 1);
|
||||
private static final Skill HYPER_MEGA_PLASMA_BRUST = SkillData.getInstance().getSkill(16642, 1);
|
||||
private static final Skill HIPER_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16643, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING = SkillData.getInstance().getSkill(16644, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING_MEGA_BRUST = SkillData.getInstance().getSkill(16645, 1);
|
||||
private static final Skill ULTRA_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16647, 1);
|
||||
private static final Skill[] RAMONA1_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING
|
||||
};
|
||||
private static final Skill[] RAMONA2_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST
|
||||
};
|
||||
private static final Skill[] RAMONA3_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST,
|
||||
HIPER_MEGA_TELEKINESS,
|
||||
ULTRA_MEGA_TELEKINESS
|
||||
};
|
||||
// Trigers
|
||||
private static final int FIRST_GENERATOR = 22230702;
|
||||
private static final int SECOND_GENERATOR = 22230704;
|
||||
private static final int THRID_GENERATOR = 22230706;
|
||||
private static final int FOURTH_GENERATOR = 22230708;
|
||||
// Locations
|
||||
private static final Location RAMONA_SPAWN_LOC_1 = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC_2 = new Location(86327, 169759, -10465, 16383);
|
||||
private static final Location DEFAULT_LOC = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC = new Location(86327, 169759, -10465, 16383);
|
||||
// Other
|
||||
private static final int ROOM_CONTROL_DOOR = 22230711;
|
||||
private static final NoSummonFriendZone ZONE = ZoneManager.getInstance().getZoneById(210108, NoSummonFriendZone.class);
|
||||
private static final int MIN_PLAYER_COUNT = 14;
|
||||
private static final EffectZone ZONE_ATTACK = ZoneManager.getInstance().getZoneById(200109, EffectZone.class);
|
||||
private static final EffectZone ZONE_DEFENCE = ZoneManager.getInstance().getZoneById(200110, EffectZone.class);
|
||||
private static final EffectZone ZONE_HP = ZoneManager.getInstance().getZoneById(200111, EffectZone.class);
|
||||
private static final EffectZone ZONE_ERADICATION = ZoneManager.getInstance().getZoneById(200112, EffectZone.class);
|
||||
// Vars
|
||||
private static DoorInstance _door;
|
||||
private static final String RAMONA_RESPAWN_VAR = "RamonaRespawn";
|
||||
private static Status _boss = Status.ALIVE;
|
||||
private static ArrayList<Npc> _minions = new ArrayList<>();
|
||||
private static int _bossStage;
|
||||
private static long _lastAction;
|
||||
private static Npc _invisible;
|
||||
private static Npc _ramona1;
|
||||
private static Npc _ramona2;
|
||||
private static Npc _ramona3;
|
||||
|
||||
private Ramona()
|
||||
{
|
||||
addStartNpc(ROOM_CONTROL);
|
||||
addKillId(ROOM_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(INVISIBLE);
|
||||
addAttackId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addStartNpc(MP_CONTROL);
|
||||
addKillId(MP_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(MP_CONTROL);
|
||||
addAttackId(MP_CONTROL, RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addSpawnId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
|
||||
final long temp = GlobalVariablesManager.getInstance().getLong(RAMONA_RESPAWN_VAR, 0) - System.currentTimeMillis();
|
||||
if (temp > 0)
|
||||
{
|
||||
_boss = Status.DEAD;
|
||||
startQuestTimer("RAMONA_UNLOCK", temp, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,16 +118,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "RAMONA_UNLOCK":
|
||||
{
|
||||
_boss = Status.ALIVE;
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MS":
|
||||
{
|
||||
addSpawn(ROOM_CONTROL, RAMONA_SPAWN_LOC_1, false, 600000, false);
|
||||
addSpawn(RAMONA, RAMONA_SPAWN_LOC_2, false, 600000, false);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (ZONE.getCharactersInside().size() >= Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.setIsInvul(false);
|
||||
cancelQuestTimers("SPAWN_MS");
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 5000, null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_1":
|
||||
{
|
||||
_bossStage = 1;
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, Npc.class, 3000, ramona ->
|
||||
{
|
||||
if (ramona.getId() == RAMONA)
|
||||
@ -134,91 +144,53 @@ public class Ramona extends AbstractNpcAI
|
||||
ramona.deleteMe();
|
||||
}
|
||||
});
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC_1, false, 1200000, true);
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null, true);
|
||||
startQuestTimer("RAMONA1_SKILL", 6000, _ramona1, null);
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC, false, 1200000, true);
|
||||
startQuestTimer("GENERATOR_1", getRandom(300000, 600000), null, null);
|
||||
startQuestTimer("GENERATOR_2", getRandom(900000, 1200000), null, null);
|
||||
startQuestTimer("GENERATOR_3", getRandom(1500000, 1800000), null, null);
|
||||
startQuestTimer("GENERATOR_4", getRandom(2100000, 2400000), null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case "RAMONA1_SKILL":
|
||||
case "GENERATOR_1":
|
||||
{
|
||||
if ((_bossStage == 1) && _ramona1.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA1_SKILLS[Rnd.get(RAMONA1_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona1.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FIRST_GENERATOR, true));
|
||||
ZONE_ATTACK.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS":
|
||||
case "GENERATOR_2":
|
||||
{
|
||||
_bossStage = 2;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA2_SKILL", 6000, _ramona2, null);
|
||||
ZONE.broadcastPacket(new OnEventTrigger(SECOND_GENERATOR, true));
|
||||
ZONE_DEFENCE.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "RAMONA2_SKILL":
|
||||
case "GENERATOR_3":
|
||||
{
|
||||
if ((_bossStage == 2) && _ramona2.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA2_SKILLS[Rnd.get(RAMONA2_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona2.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(THRID_GENERATOR, true));
|
||||
ZONE_HP.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS_1":
|
||||
case "GENERATOR_4":
|
||||
{
|
||||
_bossStage = 3;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA3_SKILL", 6000, _ramona3, null);
|
||||
break;
|
||||
}
|
||||
case "RAMONA3_SKILL":
|
||||
{
|
||||
if ((_bossStage == 3) && _ramona3.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA3_SKILLS[Rnd.get(RAMONA3_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona3.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FOURTH_GENERATOR, true));
|
||||
ZONE_ERADICATION.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "CHECK_ACTIVITY_TASK":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
// GrandBossManager.getInstance().setBossStatus(RAMONA, ALIVE);
|
||||
for (Creature creature : ZONE.getCharactersInside())
|
||||
for (Creature charInside : ZONE.getCharactersInside())
|
||||
{
|
||||
if (creature != null)
|
||||
if (charInside != null)
|
||||
{
|
||||
if (creature.isNpc())
|
||||
if (charInside.isNpc())
|
||||
{
|
||||
creature.deleteMe();
|
||||
charInside.deleteMe();
|
||||
}
|
||||
else if (creature.isPlayer())
|
||||
else if (charInside.isPlayer())
|
||||
{
|
||||
creature.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(creature, TeleportWhereType.TOWN));
|
||||
charInside.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(charInside, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,22 +198,12 @@ public class Ramona extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CANCEL_TIMERS":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 30000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "END_RAMONA":
|
||||
{
|
||||
_bossStage = 0;
|
||||
ZONE.oustAllPlayers();
|
||||
if (_ramona1 != null)
|
||||
{
|
||||
@ -266,9 +228,29 @@ public class Ramona extends AbstractNpcAI
|
||||
minion.deleteMe();
|
||||
}
|
||||
}
|
||||
if ((_boss == Status.ALIVE) || (_boss == Status.IN_FIGHT))
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
for (int i = FIRST_GENERATOR; i <= FOURTH_GENERATOR; i++)
|
||||
{
|
||||
ZONE.broadcastPacket(new OnEventTrigger(i, false));
|
||||
}
|
||||
ZONE_ATTACK.setEnabled(false);
|
||||
ZONE_DEFENCE.setEnabled(false);
|
||||
ZONE_HP.setEnabled(false);
|
||||
ZONE_ERADICATION.setEnabled(false);
|
||||
cancelQuestTimers("GENERATOR_1");
|
||||
cancelQuestTimers("GENERATOR_2");
|
||||
cancelQuestTimers("GENERATOR_3");
|
||||
cancelQuestTimers("GENERATOR_4");
|
||||
addSpawn(RAMONA, DEFAULT_LOC, false, 0, false);
|
||||
_minions.clear();
|
||||
_invisible.setScriptValue(0);
|
||||
_door.setTargetable(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -278,38 +260,61 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
double currentHp = (npc.getCurrentHp() / npc.getMaxHp()) * 100;
|
||||
switch (npc.getId())
|
||||
{
|
||||
case MP_CONTROL:
|
||||
{
|
||||
if (ZONE.getCharactersInside().size() < Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WHAT_S_UP_WITH_YOUR_EYES_YOU_NEED_MORE_ENERGY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_1:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 75)
|
||||
if (npc.getCurrentHpPercent() < 75)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_A);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona2.setCurrentHp(_ramona1.getCurrentHp());
|
||||
_ramona1.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS", 6000, _ramona2, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 50)
|
||||
if (npc.getCurrentHpPercent() < 50)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_B);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona3.setCurrentHp(_ramona2.getCurrentHp());
|
||||
_ramona2.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS_1", 6000, _ramona3, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if ((npc.getCurrentHpPercent() < 25) && npc.isScriptValue(2))
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -321,24 +326,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ROOM_CONTROL:
|
||||
case MP_CONTROL:
|
||||
{
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, Door ->
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, door ->
|
||||
{
|
||||
if (Door.getId() == ROOM_CONTROL_DOOR)
|
||||
if (door.getId() == ROOM_CONTROL_DOOR)
|
||||
{
|
||||
Door.closeMe();
|
||||
Door.setTargetable(false);
|
||||
_door = Door;
|
||||
door.closeMe();
|
||||
}
|
||||
});
|
||||
startQuestTimer("SPAWN_RAMONA_1", 5000, npc, null);
|
||||
startQuestTimer("SPAWN_RAMONA_1", 10000, npc, null);
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
notifyEvent("CANCEL_TIMERS", null, null);
|
||||
startQuestTimer("END_RAMONA", 300000, null, null);
|
||||
_boss = Status.DEAD;
|
||||
long respawnTime = (Config.RAMONA_SPAWN_INTERVAL + getRandom(-Config.RAMONA_SPAWN_RANDOM, Config.RAMONA_SPAWN_RANDOM)) * 3600000;
|
||||
GlobalVariablesManager.getInstance().set(RAMONA_RESPAWN_VAR, System.currentTimeMillis() + respawnTime);
|
||||
startQuestTimer("RAMONA_UNLOCK", respawnTime, null, null);
|
||||
startQuestTimer("END_RAMONA", 90000, null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -348,15 +354,35 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
|
||||
{
|
||||
if (creature.isPlayer() && npc.isScriptValue(0) && (ZONE.getCharactersInside().size() >= MIN_PLAYER_COUNT))
|
||||
npc.setIsInvul(true);
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null);
|
||||
npc.setScriptValue(1);
|
||||
_invisible = npc;
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null, true);
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case RAMONA_1:
|
||||
{
|
||||
_boss = Status.IN_FIGHT;
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Ramona();
|
||||
|
@ -2497,7 +2497,15 @@
|
||||
<height normal="47.5" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26141" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<npc id="26141" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2506,8 +2514,8 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
@ -2518,6 +2526,9 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2529,8 +2540,17 @@
|
||||
<height normal="87" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26142" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<npc id="26142" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2539,14 +2559,22 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2559,20 +2587,34 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26143" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<skill name="Skill04_ID" id="16646" level="1" />
|
||||
<skill name="Skill04_ID" id="16647" level="1" />
|
||||
<param name="Skill01_Probablity" value="300" />
|
||||
<param name="Skill02_Probablity" value="300" />
|
||||
<param name="Skill03_Probablity" value="300" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
<param name="Skill05_Probablity" value="500" />
|
||||
<param name="Skill06_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<acquire exp="576969277248" sp="1153938597" raidPoints="300" />
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="27188512" hpRegen="1824.56140350877" mp="50920" mpRegen="1925.92592592593" />
|
||||
<vitals hp="40842816.910005" hpRegen="436.263366" mp="83501.371" mpRegen="3.3" />
|
||||
<speed>
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="300" water="300" wind="250" earth="370" holy="300" dark="300"/>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
@ -2580,12 +2622,23 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="14804" level="10" /> <!-- Damage Reflection Attack Resistance -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
<skill id="16646" level="1"/> <!-- Hyper Mega Telekinesis -->
|
||||
<skill id="16647" level="1"/> <!-- Ultra Mega Telekinesis -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
<clan>RAMONA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
<dropLists>
|
||||
<drop>
|
||||
<item id="47244" min="1" max="1" chance="50.91" /> <!-- Ramona's Fancy Earring -->
|
||||
@ -2671,12 +2724,14 @@
|
||||
<item id="40198" min="1" max="1" chance="2.568" /> <!-- Disassembly Recipe Pouch: Armor -->
|
||||
</lucky>
|
||||
</dropLists>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26144" level="104" type="Monster" name="Dancer of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16681" level="1" />
|
||||
<skill name="Skill02_ID" id="16677" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2699,6 +2754,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16681" level="1" /> <!-- For the Queen -->
|
||||
<skill id="16677" level="1" /> <!-- Hyper Power -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2711,6 +2768,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26145" level="104" type="Monster" name="Commander of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16682" level="1" />
|
||||
<skill name="Skill02_ID" id="16680" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2733,6 +2796,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16682" level="1" /> <!-- Doom Hammer -->
|
||||
<skill id="16680" level="1" /> <!-- Commander Aggression Aura -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2745,6 +2810,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26146" level="104" type="Monster" name="Shooter of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16683" level="1" />
|
||||
<skill name="Skill02_ID" id="16684" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2767,6 +2838,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16683" level="1" /> <!-- Stun Shot -->
|
||||
<skill id="16684" level="1" /> <!-- Multi Shot -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2779,6 +2852,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26147" level="104" type="Monster" name="Wizard of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16685" level="1" />
|
||||
<skill name="Skill02_ID" id="16686" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2801,6 +2880,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16685" level="1" /> <!-- Ultra Plasma Ball -->
|
||||
<skill id="16686" level="1" /> <!-- Ultra Plasma Wave -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2840,8 +2921,12 @@
|
||||
<walk ground="55" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49047.619047619" magical="8655.46218487395" critical="4" attackSpeed="398" range="40" />
|
||||
<defence physical="3814.81481481481" magical="2215.05376344086" />
|
||||
<attack physical="256235.619047619" magical="43275.46218487395" critical="4.75" accuracy="4.75" attackSpeed="398" range="40" />
|
||||
<defence physical="19070.81481481481" magical="11075.05376344086" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
|
@ -461,30 +461,76 @@
|
||||
<skill id="16731" toLevel="1" name="Leaking Magic - Attack">
|
||||
<!-- The physical attack and magic attack of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1059</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16732" toLevel="1" name="Leaking Magic - Defense">
|
||||
<!-- The physical defense and magic defense of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1478</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16733" toLevel="1" name="Leaking Magic - HP">
|
||||
<!-- The HP regen of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1044</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="HpRegen">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16734" toLevel="1" name="Leaking Magic - Eradication">
|
||||
<!-- The Queen and her minions continuously receive massive damage fur to the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1108</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<isDebuff>1</isDebuff>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<conditions>
|
||||
<condition name="OpTargetPc" /> <!-- TODO -->
|
||||
<condition name="OpResurrection" /> <!-- TODO -->
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="BlockResurrection" /> <!-- TODO -->
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16735" toLevel="10" name="Inherent Abilities - Blackbird Clan Talisman">
|
||||
<!-- Damage received from Demons -$s1. -->
|
||||
|
@ -2261,4 +2261,44 @@
|
||||
<node X="-14188" Y="254493" />
|
||||
<node X="-14650" Y="254393" />
|
||||
</zone>
|
||||
<!-- Ramona -->
|
||||
<zone name="ramona_magic_attack" id="200109" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16731-1;" /> <!-- Leaking Magic - Attack -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_defence" id="200110" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16732-1;" /> <!-- Leaking Magic - Defense -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200111" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16733-1;" /> <!-- Leaking Magic - HP -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200112" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="true"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16734-1;" /> <!-- eaking Magic - Eradication -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
</list>
|
@ -187,7 +187,7 @@
|
||||
<zone name="Heart_Trasken_Zone" id="12109" type="NoSummonFriendZone" shape="Cylinder" minZ="-16000" maxZ="16000" rad="2500">
|
||||
<node X="88110" Y="-173795" />
|
||||
</zone>
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10050" rad="3000">
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="Helios_Zone" id="210109" type="NoSummonFriendZone" shape="Cylinder" minZ="3400" maxZ="3600" rad="3100">
|
||||
|
@ -899,6 +899,11 @@ public class Config
|
||||
public static int HELIOS_MIN_PLAYER;
|
||||
public static int HELIOS_MIN_PLAYER_LVL;
|
||||
|
||||
// Ramona
|
||||
public static int RAMONA_SPAWN_INTERVAL;
|
||||
public static int RAMONA_SPAWN_RANDOM;
|
||||
public static int RAMONA_MIN_PLAYER;
|
||||
|
||||
// Gracia Seeds Settings
|
||||
public static int SOD_TIAT_KILL_COUNT;
|
||||
public static long SOD_STAGE_2_LENGTH;
|
||||
@ -2460,6 +2465,10 @@ public class Config
|
||||
HELIOS_MIN_PLAYER = GrandBossSettings.getInt("HeliosMinPlayers", 70);
|
||||
HELIOS_MIN_PLAYER_LVL = GrandBossSettings.getInt("HeliosMinPlayerLvl", 102);
|
||||
|
||||
RAMONA_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfRamonaSpawn", 72);
|
||||
RAMONA_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfRamonaSpawn", 48);
|
||||
RAMONA_MIN_PLAYER = GrandBossSettings.getInt("RamonaMinPlayers", 7);
|
||||
|
||||
// Gracia Seeds
|
||||
final PropertiesParser GraciaSeedsSettings = new PropertiesParser(GRACIASEEDS_CONFIG_FILE);
|
||||
|
||||
|
@ -172,6 +172,19 @@ LindviorMaxPlayers = 112
|
||||
# Minimum players Level for enter to Lindvior. Retail: 99
|
||||
LindviorMinPlayerLvl = 99
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Ramona
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Interval time of Ramona. Value is hour. Range 1-480
|
||||
IntervalOfRamonaSpawn = 72
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfRamonaSpawn = 48
|
||||
|
||||
# Minimal count of players for enter to Ramona. Retail: 7
|
||||
RamonaMinPlayers = 7
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helios
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -18,9 +18,11 @@ package ai.bosses.Ramona;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
@ -32,8 +34,10 @@ import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestTimer;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
|
||||
import org.l2jmobius.gameserver.model.zone.type.NoSummonFriendZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
@ -44,9 +48,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static enum Status
|
||||
{
|
||||
ALIVE,
|
||||
IN_FIGHT,
|
||||
DEAD
|
||||
}
|
||||
|
||||
// NPC
|
||||
private static final int ROOM_CONTROL = 19642;
|
||||
private static final int INVISIBLE = 19643;
|
||||
private static final int MP_CONTROL = 19642;
|
||||
private static final int RAMONA = 19648;
|
||||
private static final int RAMONA_1 = 26141;
|
||||
private static final int RAMONA_2 = 26142;
|
||||
@ -58,58 +69,48 @@ public class Ramona extends AbstractNpcAI
|
||||
26146, // Shooter of the Queen
|
||||
26147 // Wizard of the Queen
|
||||
};
|
||||
// skill
|
||||
private static final Skill HYPER_MEGA_PLASMA_SHOT = SkillData.getInstance().getSkill(16641, 1);
|
||||
private static final Skill HYPER_MEGA_PLASMA_BRUST = SkillData.getInstance().getSkill(16642, 1);
|
||||
private static final Skill HIPER_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16643, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING = SkillData.getInstance().getSkill(16644, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING_MEGA_BRUST = SkillData.getInstance().getSkill(16645, 1);
|
||||
private static final Skill ULTRA_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16647, 1);
|
||||
private static final Skill[] RAMONA1_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING
|
||||
};
|
||||
private static final Skill[] RAMONA2_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST
|
||||
};
|
||||
private static final Skill[] RAMONA3_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST,
|
||||
HIPER_MEGA_TELEKINESS,
|
||||
ULTRA_MEGA_TELEKINESS
|
||||
};
|
||||
// Trigers
|
||||
private static final int FIRST_GENERATOR = 22230702;
|
||||
private static final int SECOND_GENERATOR = 22230704;
|
||||
private static final int THRID_GENERATOR = 22230706;
|
||||
private static final int FOURTH_GENERATOR = 22230708;
|
||||
// Locations
|
||||
private static final Location RAMONA_SPAWN_LOC_1 = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC_2 = new Location(86327, 169759, -10465, 16383);
|
||||
private static final Location DEFAULT_LOC = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC = new Location(86327, 169759, -10465, 16383);
|
||||
// Other
|
||||
private static final int ROOM_CONTROL_DOOR = 22230711;
|
||||
private static final NoSummonFriendZone ZONE = ZoneManager.getInstance().getZoneById(210108, NoSummonFriendZone.class);
|
||||
private static final int MIN_PLAYER_COUNT = 14;
|
||||
private static final EffectZone ZONE_ATTACK = ZoneManager.getInstance().getZoneById(200109, EffectZone.class);
|
||||
private static final EffectZone ZONE_DEFENCE = ZoneManager.getInstance().getZoneById(200110, EffectZone.class);
|
||||
private static final EffectZone ZONE_HP = ZoneManager.getInstance().getZoneById(200111, EffectZone.class);
|
||||
private static final EffectZone ZONE_ERADICATION = ZoneManager.getInstance().getZoneById(200112, EffectZone.class);
|
||||
// Vars
|
||||
private static DoorInstance _door;
|
||||
private static final String RAMONA_RESPAWN_VAR = "RamonaRespawn";
|
||||
private static Status _boss = Status.ALIVE;
|
||||
private static ArrayList<Npc> _minions = new ArrayList<>();
|
||||
private static int _bossStage;
|
||||
private static long _lastAction;
|
||||
private static Npc _invisible;
|
||||
private static Npc _ramona1;
|
||||
private static Npc _ramona2;
|
||||
private static Npc _ramona3;
|
||||
|
||||
private Ramona()
|
||||
{
|
||||
addStartNpc(ROOM_CONTROL);
|
||||
addKillId(ROOM_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(INVISIBLE);
|
||||
addAttackId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addStartNpc(MP_CONTROL);
|
||||
addKillId(MP_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(MP_CONTROL);
|
||||
addAttackId(MP_CONTROL, RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addSpawnId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
|
||||
final long temp = GlobalVariablesManager.getInstance().getLong(RAMONA_RESPAWN_VAR, 0) - System.currentTimeMillis();
|
||||
if (temp > 0)
|
||||
{
|
||||
_boss = Status.DEAD;
|
||||
startQuestTimer("RAMONA_UNLOCK", temp, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,16 +118,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "RAMONA_UNLOCK":
|
||||
{
|
||||
_boss = Status.ALIVE;
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MS":
|
||||
{
|
||||
addSpawn(ROOM_CONTROL, RAMONA_SPAWN_LOC_1, false, 600000, false);
|
||||
addSpawn(RAMONA, RAMONA_SPAWN_LOC_2, false, 600000, false);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (ZONE.getCharactersInside().size() >= Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.setIsInvul(false);
|
||||
cancelQuestTimers("SPAWN_MS");
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 5000, null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_1":
|
||||
{
|
||||
_bossStage = 1;
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, Npc.class, 3000, ramona ->
|
||||
{
|
||||
if (ramona.getId() == RAMONA)
|
||||
@ -134,91 +144,53 @@ public class Ramona extends AbstractNpcAI
|
||||
ramona.deleteMe();
|
||||
}
|
||||
});
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC_1, false, 1200000, true);
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null, true);
|
||||
startQuestTimer("RAMONA1_SKILL", 6000, _ramona1, null);
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC, false, 1200000, true);
|
||||
startQuestTimer("GENERATOR_1", getRandom(300000, 600000), null, null);
|
||||
startQuestTimer("GENERATOR_2", getRandom(900000, 1200000), null, null);
|
||||
startQuestTimer("GENERATOR_3", getRandom(1500000, 1800000), null, null);
|
||||
startQuestTimer("GENERATOR_4", getRandom(2100000, 2400000), null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case "RAMONA1_SKILL":
|
||||
case "GENERATOR_1":
|
||||
{
|
||||
if ((_bossStage == 1) && _ramona1.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA1_SKILLS[Rnd.get(RAMONA1_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona1.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FIRST_GENERATOR, true));
|
||||
ZONE_ATTACK.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS":
|
||||
case "GENERATOR_2":
|
||||
{
|
||||
_bossStage = 2;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA2_SKILL", 6000, _ramona2, null);
|
||||
ZONE.broadcastPacket(new OnEventTrigger(SECOND_GENERATOR, true));
|
||||
ZONE_DEFENCE.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "RAMONA2_SKILL":
|
||||
case "GENERATOR_3":
|
||||
{
|
||||
if ((_bossStage == 2) && _ramona2.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA2_SKILLS[Rnd.get(RAMONA2_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona2.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(THRID_GENERATOR, true));
|
||||
ZONE_HP.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS_1":
|
||||
case "GENERATOR_4":
|
||||
{
|
||||
_bossStage = 3;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA3_SKILL", 6000, _ramona3, null);
|
||||
break;
|
||||
}
|
||||
case "RAMONA3_SKILL":
|
||||
{
|
||||
if ((_bossStage == 3) && _ramona3.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA3_SKILLS[Rnd.get(RAMONA3_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona3.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FOURTH_GENERATOR, true));
|
||||
ZONE_ERADICATION.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "CHECK_ACTIVITY_TASK":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
// GrandBossManager.getInstance().setBossStatus(RAMONA, ALIVE);
|
||||
for (Creature creature : ZONE.getCharactersInside())
|
||||
for (Creature charInside : ZONE.getCharactersInside())
|
||||
{
|
||||
if (creature != null)
|
||||
if (charInside != null)
|
||||
{
|
||||
if (creature.isNpc())
|
||||
if (charInside.isNpc())
|
||||
{
|
||||
creature.deleteMe();
|
||||
charInside.deleteMe();
|
||||
}
|
||||
else if (creature.isPlayer())
|
||||
else if (charInside.isPlayer())
|
||||
{
|
||||
creature.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(creature, TeleportWhereType.TOWN));
|
||||
charInside.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(charInside, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,22 +198,12 @@ public class Ramona extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CANCEL_TIMERS":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 30000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "END_RAMONA":
|
||||
{
|
||||
_bossStage = 0;
|
||||
ZONE.oustAllPlayers();
|
||||
if (_ramona1 != null)
|
||||
{
|
||||
@ -266,9 +228,29 @@ public class Ramona extends AbstractNpcAI
|
||||
minion.deleteMe();
|
||||
}
|
||||
}
|
||||
if ((_boss == Status.ALIVE) || (_boss == Status.IN_FIGHT))
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
for (int i = FIRST_GENERATOR; i <= FOURTH_GENERATOR; i++)
|
||||
{
|
||||
ZONE.broadcastPacket(new OnEventTrigger(i, false));
|
||||
}
|
||||
ZONE_ATTACK.setEnabled(false);
|
||||
ZONE_DEFENCE.setEnabled(false);
|
||||
ZONE_HP.setEnabled(false);
|
||||
ZONE_ERADICATION.setEnabled(false);
|
||||
cancelQuestTimers("GENERATOR_1");
|
||||
cancelQuestTimers("GENERATOR_2");
|
||||
cancelQuestTimers("GENERATOR_3");
|
||||
cancelQuestTimers("GENERATOR_4");
|
||||
addSpawn(RAMONA, DEFAULT_LOC, false, 0, false);
|
||||
_minions.clear();
|
||||
_invisible.setScriptValue(0);
|
||||
_door.setTargetable(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -278,38 +260,61 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
double currentHp = (npc.getCurrentHp() / npc.getMaxHp()) * 100;
|
||||
switch (npc.getId())
|
||||
{
|
||||
case MP_CONTROL:
|
||||
{
|
||||
if (ZONE.getCharactersInside().size() < Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WHAT_S_UP_WITH_YOUR_EYES_YOU_NEED_MORE_ENERGY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_1:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 75)
|
||||
if (npc.getCurrentHpPercent() < 75)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_A);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona2.setCurrentHp(_ramona1.getCurrentHp());
|
||||
_ramona1.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS", 6000, _ramona2, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 50)
|
||||
if (npc.getCurrentHpPercent() < 50)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_B);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona3.setCurrentHp(_ramona2.getCurrentHp());
|
||||
_ramona2.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS_1", 6000, _ramona3, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if ((npc.getCurrentHpPercent() < 25) && npc.isScriptValue(2))
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -321,24 +326,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ROOM_CONTROL:
|
||||
case MP_CONTROL:
|
||||
{
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, Door ->
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, door ->
|
||||
{
|
||||
if (Door.getId() == ROOM_CONTROL_DOOR)
|
||||
if (door.getId() == ROOM_CONTROL_DOOR)
|
||||
{
|
||||
Door.closeMe();
|
||||
Door.setTargetable(false);
|
||||
_door = Door;
|
||||
door.closeMe();
|
||||
}
|
||||
});
|
||||
startQuestTimer("SPAWN_RAMONA_1", 5000, npc, null);
|
||||
startQuestTimer("SPAWN_RAMONA_1", 10000, npc, null);
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
notifyEvent("CANCEL_TIMERS", null, null);
|
||||
startQuestTimer("END_RAMONA", 300000, null, null);
|
||||
_boss = Status.DEAD;
|
||||
long respawnTime = (Config.RAMONA_SPAWN_INTERVAL + getRandom(-Config.RAMONA_SPAWN_RANDOM, Config.RAMONA_SPAWN_RANDOM)) * 3600000;
|
||||
GlobalVariablesManager.getInstance().set(RAMONA_RESPAWN_VAR, System.currentTimeMillis() + respawnTime);
|
||||
startQuestTimer("RAMONA_UNLOCK", respawnTime, null, null);
|
||||
startQuestTimer("END_RAMONA", 90000, null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -348,15 +354,35 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
|
||||
{
|
||||
if (creature.isPlayer() && npc.isScriptValue(0) && (ZONE.getCharactersInside().size() >= MIN_PLAYER_COUNT))
|
||||
npc.setIsInvul(true);
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null);
|
||||
npc.setScriptValue(1);
|
||||
_invisible = npc;
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null, true);
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case RAMONA_1:
|
||||
{
|
||||
_boss = Status.IN_FIGHT;
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Ramona();
|
||||
|
@ -2497,7 +2497,15 @@
|
||||
<height normal="47.5" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26141" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<npc id="26141" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2506,8 +2514,8 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
@ -2518,6 +2526,9 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2529,8 +2540,17 @@
|
||||
<height normal="87" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26142" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<npc id="26142" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2539,14 +2559,22 @@
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2559,20 +2587,34 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26143" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<skill name="Skill04_ID" id="16646" level="1" />
|
||||
<skill name="Skill04_ID" id="16647" level="1" />
|
||||
<param name="Skill01_Probablity" value="300" />
|
||||
<param name="Skill02_Probablity" value="300" />
|
||||
<param name="Skill03_Probablity" value="300" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
<param name="Skill05_Probablity" value="500" />
|
||||
<param name="Skill06_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<acquire exp="576969277248" sp="1153938597" raidPoints="300" />
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
<vitals hp="27188512" hpRegen="1824.56140350877" mp="50920" mpRegen="1925.92592592593" />
|
||||
<vitals hp="40842816.910005" hpRegen="436.263366" mp="83501.371" mpRegen="3.3" />
|
||||
<speed>
|
||||
<walk ground="40" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49523.8095238095" magical="8739.49579831933" critical="4" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="3851.85185185185" magical="2236.55913978495" />
|
||||
<attack physical="295358.4152" magical="211816.358" critical="4.75" accuracy="4.75" type="BLUNT" attackSpeed="253" range="40" />
|
||||
<defence physical="34243.68753" magical="16714.49407" />
|
||||
<attribute>
|
||||
<defence fire="300" water="300" wind="250" earth="370" holy="300" dark="300"/>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
@ -2580,12 +2622,23 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="14804" level="10" /> <!-- Damage Reflection Attack Resistance -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
<skill id="16646" level="1"/> <!-- Hyper Mega Telekinesis -->
|
||||
<skill id="16647" level="1"/> <!-- Ultra Mega Telekinesis -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
<clan>RAMONA</clan>
|
||||
</clanList>
|
||||
</ai>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
<dropLists>
|
||||
<drop>
|
||||
<item id="47244" min="1" max="1" chance="50.91" /> <!-- Ramona's Fancy Earring -->
|
||||
@ -2671,12 +2724,14 @@
|
||||
<item id="40198" min="1" max="1" chance="2.568" /> <!-- Disassembly Recipe Pouch: Armor -->
|
||||
</lucky>
|
||||
</dropLists>
|
||||
<collision>
|
||||
<radius normal="40" />
|
||||
<height normal="82" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26144" level="104" type="Monster" name="Dancer of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16681" level="1" />
|
||||
<skill name="Skill02_ID" id="16677" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2699,6 +2754,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16681" level="1" /> <!-- For the Queen -->
|
||||
<skill id="16677" level="1" /> <!-- Hyper Power -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2711,6 +2768,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26145" level="104" type="Monster" name="Commander of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16682" level="1" />
|
||||
<skill name="Skill02_ID" id="16680" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2733,6 +2796,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16682" level="1" /> <!-- Doom Hammer -->
|
||||
<skill id="16680" level="1" /> <!-- Commander Aggression Aura -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2745,6 +2810,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26146" level="104" type="Monster" name="Shooter of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16683" level="1" />
|
||||
<skill name="Skill02_ID" id="16684" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2767,6 +2838,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16683" level="1" /> <!-- Stun Shot -->
|
||||
<skill id="16684" level="1" /> <!-- Multi Shot -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2779,6 +2852,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26147" level="104" type="Monster" name="Wizard of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16685" level="1" />
|
||||
<skill name="Skill02_ID" id="16686" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2801,6 +2880,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16685" level="1" /> <!-- Ultra Plasma Ball -->
|
||||
<skill id="16686" level="1" /> <!-- Ultra Plasma Wave -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2840,8 +2921,12 @@
|
||||
<walk ground="55" />
|
||||
<run ground="180" />
|
||||
</speed>
|
||||
<attack physical="49047.619047619" magical="8655.46218487395" critical="4" attackSpeed="398" range="40" />
|
||||
<defence physical="3814.81481481481" magical="2215.05376344086" />
|
||||
<attack physical="256235.619047619" magical="43275.46218487395" critical="4.75" accuracy="4.75" attackSpeed="398" range="40" />
|
||||
<defence physical="19070.81481481481" magical="11075.05376344086" />
|
||||
<attribute>
|
||||
<defence fire="350" water="300" wind="350" earth="350" holy="350" dark="350" />
|
||||
<attack type="EARTH" value="450" />
|
||||
</attribute>
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
|
@ -461,30 +461,76 @@
|
||||
<skill id="16731" toLevel="1" name="Leaking Magic - Attack">
|
||||
<!-- The physical attack and magic attack of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1059</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16732" toLevel="1" name="Leaking Magic - Defense">
|
||||
<!-- The physical defense and magic defense of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1478</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16733" toLevel="1" name="Leaking Magic - HP">
|
||||
<!-- The HP regen of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1044</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="HpRegen">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16734" toLevel="1" name="Leaking Magic - Eradication">
|
||||
<!-- The Queen and her minions continuously receive massive damage fur to the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1108</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<isDebuff>1</isDebuff>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<conditions>
|
||||
<condition name="OpTargetPc" /> <!-- TODO -->
|
||||
<condition name="OpResurrection" /> <!-- TODO -->
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="BlockResurrection" /> <!-- TODO -->
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16735" toLevel="10" name="Inherent Abilities - Blackbird Clan Talisman">
|
||||
<!-- Damage received from Demons -$s1. -->
|
||||
|
@ -2261,4 +2261,44 @@
|
||||
<node X="-14188" Y="254493" />
|
||||
<node X="-14650" Y="254393" />
|
||||
</zone>
|
||||
<!-- Ramona -->
|
||||
<zone name="ramona_magic_attack" id="200109" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16731-1;" /> <!-- Leaking Magic - Attack -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_defence" id="200110" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16732-1;" /> <!-- Leaking Magic - Defense -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200111" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16733-1;" /> <!-- Leaking Magic - HP -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200112" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="true"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16734-1;" /> <!-- eaking Magic - Eradication -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
</list>
|
@ -187,7 +187,7 @@
|
||||
<zone name="Heart_Trasken_Zone" id="12109" type="NoSummonFriendZone" shape="Cylinder" minZ="-16000" maxZ="16000" rad="2500">
|
||||
<node X="88110" Y="-173795" />
|
||||
</zone>
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10050" rad="3000">
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="Helios_Zone" id="210109" type="NoSummonFriendZone" shape="Cylinder" minZ="3400" maxZ="3600" rad="3100">
|
||||
|
@ -899,6 +899,11 @@ public class Config
|
||||
public static int HELIOS_MIN_PLAYER;
|
||||
public static int HELIOS_MIN_PLAYER_LVL;
|
||||
|
||||
// Ramona
|
||||
public static int RAMONA_SPAWN_INTERVAL;
|
||||
public static int RAMONA_SPAWN_RANDOM;
|
||||
public static int RAMONA_MIN_PLAYER;
|
||||
|
||||
// Gracia Seeds Settings
|
||||
public static int SOD_TIAT_KILL_COUNT;
|
||||
public static long SOD_STAGE_2_LENGTH;
|
||||
@ -2460,6 +2465,10 @@ public class Config
|
||||
HELIOS_MIN_PLAYER = GrandBossSettings.getInt("HeliosMinPlayers", 70);
|
||||
HELIOS_MIN_PLAYER_LVL = GrandBossSettings.getInt("HeliosMinPlayerLvl", 102);
|
||||
|
||||
RAMONA_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfRamonaSpawn", 72);
|
||||
RAMONA_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfRamonaSpawn", 48);
|
||||
RAMONA_MIN_PLAYER = GrandBossSettings.getInt("RamonaMinPlayers", 7);
|
||||
|
||||
// Gracia Seeds
|
||||
final PropertiesParser GraciaSeedsSettings = new PropertiesParser(GRACIASEEDS_CONFIG_FILE);
|
||||
|
||||
|
@ -166,6 +166,19 @@ LindviorMaxPlayers = 112
|
||||
# Minimum players Level for enter to Lindvior. Retail: 99
|
||||
LindviorMinPlayerLvl = 99
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Ramona
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Interval time of Ramona. Value is hour. Range 1-480
|
||||
IntervalOfRamonaSpawn = 72
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfRamonaSpawn = 48
|
||||
|
||||
# Minimal count of players for enter to Ramona. Retail: 7
|
||||
RamonaMinPlayers = 7
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helios
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -18,9 +18,11 @@ package ai.bosses.Ramona;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
@ -32,8 +34,10 @@ import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestTimer;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
|
||||
import org.l2jmobius.gameserver.model.zone.type.NoSummonFriendZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
@ -44,9 +48,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static enum Status
|
||||
{
|
||||
ALIVE,
|
||||
IN_FIGHT,
|
||||
DEAD
|
||||
}
|
||||
|
||||
// NPC
|
||||
private static final int ROOM_CONTROL = 19642;
|
||||
private static final int INVISIBLE = 19643;
|
||||
private static final int MP_CONTROL = 19642;
|
||||
private static final int RAMONA = 19648;
|
||||
private static final int RAMONA_1 = 26141;
|
||||
private static final int RAMONA_2 = 26142;
|
||||
@ -58,58 +69,48 @@ public class Ramona extends AbstractNpcAI
|
||||
26146, // Shooter of the Queen
|
||||
26147 // Wizard of the Queen
|
||||
};
|
||||
// skill
|
||||
private static final Skill HYPER_MEGA_PLASMA_SHOT = SkillData.getInstance().getSkill(16641, 1);
|
||||
private static final Skill HYPER_MEGA_PLASMA_BRUST = SkillData.getInstance().getSkill(16642, 1);
|
||||
private static final Skill HIPER_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16643, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING = SkillData.getInstance().getSkill(16644, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING_MEGA_BRUST = SkillData.getInstance().getSkill(16645, 1);
|
||||
private static final Skill ULTRA_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16647, 1);
|
||||
private static final Skill[] RAMONA1_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING
|
||||
};
|
||||
private static final Skill[] RAMONA2_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST
|
||||
};
|
||||
private static final Skill[] RAMONA3_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST,
|
||||
HIPER_MEGA_TELEKINESS,
|
||||
ULTRA_MEGA_TELEKINESS
|
||||
};
|
||||
// Trigers
|
||||
private static final int FIRST_GENERATOR = 22230702;
|
||||
private static final int SECOND_GENERATOR = 22230704;
|
||||
private static final int THRID_GENERATOR = 22230706;
|
||||
private static final int FOURTH_GENERATOR = 22230708;
|
||||
// Locations
|
||||
private static final Location RAMONA_SPAWN_LOC_1 = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC_2 = new Location(86327, 169759, -10465, 16383);
|
||||
private static final Location DEFAULT_LOC = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC = new Location(86327, 169759, -10465, 16383);
|
||||
// Other
|
||||
private static final int ROOM_CONTROL_DOOR = 22230711;
|
||||
private static final NoSummonFriendZone ZONE = ZoneManager.getInstance().getZoneById(210108, NoSummonFriendZone.class);
|
||||
private static final int MIN_PLAYER_COUNT = 14;
|
||||
private static final EffectZone ZONE_ATTACK = ZoneManager.getInstance().getZoneById(200109, EffectZone.class);
|
||||
private static final EffectZone ZONE_DEFENCE = ZoneManager.getInstance().getZoneById(200110, EffectZone.class);
|
||||
private static final EffectZone ZONE_HP = ZoneManager.getInstance().getZoneById(200111, EffectZone.class);
|
||||
private static final EffectZone ZONE_ERADICATION = ZoneManager.getInstance().getZoneById(200112, EffectZone.class);
|
||||
// Vars
|
||||
private static DoorInstance _door;
|
||||
private static final String RAMONA_RESPAWN_VAR = "RamonaRespawn";
|
||||
private static Status _boss = Status.ALIVE;
|
||||
private static ArrayList<Npc> _minions = new ArrayList<>();
|
||||
private static int _bossStage;
|
||||
private static long _lastAction;
|
||||
private static Npc _invisible;
|
||||
private static Npc _ramona1;
|
||||
private static Npc _ramona2;
|
||||
private static Npc _ramona3;
|
||||
|
||||
private Ramona()
|
||||
{
|
||||
addStartNpc(ROOM_CONTROL);
|
||||
addKillId(ROOM_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(INVISIBLE);
|
||||
addAttackId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addStartNpc(MP_CONTROL);
|
||||
addKillId(MP_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(MP_CONTROL);
|
||||
addAttackId(MP_CONTROL, RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addSpawnId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
|
||||
final long temp = GlobalVariablesManager.getInstance().getLong(RAMONA_RESPAWN_VAR, 0) - System.currentTimeMillis();
|
||||
if (temp > 0)
|
||||
{
|
||||
_boss = Status.DEAD;
|
||||
startQuestTimer("RAMONA_UNLOCK", temp, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,16 +118,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "RAMONA_UNLOCK":
|
||||
{
|
||||
_boss = Status.ALIVE;
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MS":
|
||||
{
|
||||
addSpawn(ROOM_CONTROL, RAMONA_SPAWN_LOC_1, false, 600000, false);
|
||||
addSpawn(RAMONA, RAMONA_SPAWN_LOC_2, false, 600000, false);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (ZONE.getCharactersInside().size() >= Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.setIsInvul(false);
|
||||
cancelQuestTimers("SPAWN_MS");
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 5000, null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_1":
|
||||
{
|
||||
_bossStage = 1;
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, Npc.class, 3000, ramona ->
|
||||
{
|
||||
if (ramona.getId() == RAMONA)
|
||||
@ -134,91 +144,53 @@ public class Ramona extends AbstractNpcAI
|
||||
ramona.deleteMe();
|
||||
}
|
||||
});
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC_1, false, 1200000, true);
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null, true);
|
||||
startQuestTimer("RAMONA1_SKILL", 6000, _ramona1, null);
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC, false, 1200000, true);
|
||||
startQuestTimer("GENERATOR_1", getRandom(300000, 600000), null, null);
|
||||
startQuestTimer("GENERATOR_2", getRandom(900000, 1200000), null, null);
|
||||
startQuestTimer("GENERATOR_3", getRandom(1500000, 1800000), null, null);
|
||||
startQuestTimer("GENERATOR_4", getRandom(2100000, 2400000), null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case "RAMONA1_SKILL":
|
||||
case "GENERATOR_1":
|
||||
{
|
||||
if ((_bossStage == 1) && _ramona1.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA1_SKILLS[Rnd.get(RAMONA1_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona1.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FIRST_GENERATOR, true));
|
||||
ZONE_ATTACK.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS":
|
||||
case "GENERATOR_2":
|
||||
{
|
||||
_bossStage = 2;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA2_SKILL", 6000, _ramona2, null);
|
||||
ZONE.broadcastPacket(new OnEventTrigger(SECOND_GENERATOR, true));
|
||||
ZONE_DEFENCE.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "RAMONA2_SKILL":
|
||||
case "GENERATOR_3":
|
||||
{
|
||||
if ((_bossStage == 2) && _ramona2.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA2_SKILLS[Rnd.get(RAMONA2_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona2.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(THRID_GENERATOR, true));
|
||||
ZONE_HP.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS_1":
|
||||
case "GENERATOR_4":
|
||||
{
|
||||
_bossStage = 3;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA3_SKILL", 6000, _ramona3, null);
|
||||
break;
|
||||
}
|
||||
case "RAMONA3_SKILL":
|
||||
{
|
||||
if ((_bossStage == 3) && _ramona3.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA3_SKILLS[Rnd.get(RAMONA3_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona3.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FOURTH_GENERATOR, true));
|
||||
ZONE_ERADICATION.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "CHECK_ACTIVITY_TASK":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
// GrandBossManager.getInstance().setBossStatus(RAMONA, ALIVE);
|
||||
for (Creature creature : ZONE.getCharactersInside())
|
||||
for (Creature charInside : ZONE.getCharactersInside())
|
||||
{
|
||||
if (creature != null)
|
||||
if (charInside != null)
|
||||
{
|
||||
if (creature.isNpc())
|
||||
if (charInside.isNpc())
|
||||
{
|
||||
creature.deleteMe();
|
||||
charInside.deleteMe();
|
||||
}
|
||||
else if (creature.isPlayer())
|
||||
else if (charInside.isPlayer())
|
||||
{
|
||||
creature.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(creature, TeleportWhereType.TOWN));
|
||||
charInside.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(charInside, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,22 +198,12 @@ public class Ramona extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CANCEL_TIMERS":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 30000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "END_RAMONA":
|
||||
{
|
||||
_bossStage = 0;
|
||||
ZONE.oustAllPlayers();
|
||||
if (_ramona1 != null)
|
||||
{
|
||||
@ -266,9 +228,29 @@ public class Ramona extends AbstractNpcAI
|
||||
minion.deleteMe();
|
||||
}
|
||||
}
|
||||
if ((_boss == Status.ALIVE) || (_boss == Status.IN_FIGHT))
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
for (int i = FIRST_GENERATOR; i <= FOURTH_GENERATOR; i++)
|
||||
{
|
||||
ZONE.broadcastPacket(new OnEventTrigger(i, false));
|
||||
}
|
||||
ZONE_ATTACK.setEnabled(false);
|
||||
ZONE_DEFENCE.setEnabled(false);
|
||||
ZONE_HP.setEnabled(false);
|
||||
ZONE_ERADICATION.setEnabled(false);
|
||||
cancelQuestTimers("GENERATOR_1");
|
||||
cancelQuestTimers("GENERATOR_2");
|
||||
cancelQuestTimers("GENERATOR_3");
|
||||
cancelQuestTimers("GENERATOR_4");
|
||||
addSpawn(RAMONA, DEFAULT_LOC, false, 0, false);
|
||||
_minions.clear();
|
||||
_invisible.setScriptValue(0);
|
||||
_door.setTargetable(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -278,38 +260,61 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
double currentHp = (npc.getCurrentHp() / npc.getMaxHp()) * 100;
|
||||
switch (npc.getId())
|
||||
{
|
||||
case MP_CONTROL:
|
||||
{
|
||||
if (ZONE.getCharactersInside().size() < Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WHAT_S_UP_WITH_YOUR_EYES_YOU_NEED_MORE_ENERGY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_1:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 75)
|
||||
if (npc.getCurrentHpPercent() < 75)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_A);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona2.setCurrentHp(_ramona1.getCurrentHp());
|
||||
_ramona1.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS", 6000, _ramona2, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 50)
|
||||
if (npc.getCurrentHpPercent() < 50)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_B);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona3.setCurrentHp(_ramona2.getCurrentHp());
|
||||
_ramona2.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS_1", 6000, _ramona3, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if ((npc.getCurrentHpPercent() < 25) && npc.isScriptValue(2))
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -321,24 +326,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ROOM_CONTROL:
|
||||
case MP_CONTROL:
|
||||
{
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, Door ->
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, door ->
|
||||
{
|
||||
if (Door.getId() == ROOM_CONTROL_DOOR)
|
||||
if (door.getId() == ROOM_CONTROL_DOOR)
|
||||
{
|
||||
Door.closeMe();
|
||||
Door.setTargetable(false);
|
||||
_door = Door;
|
||||
door.closeMe();
|
||||
}
|
||||
});
|
||||
startQuestTimer("SPAWN_RAMONA_1", 5000, npc, null);
|
||||
startQuestTimer("SPAWN_RAMONA_1", 10000, npc, null);
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
notifyEvent("CANCEL_TIMERS", null, null);
|
||||
startQuestTimer("END_RAMONA", 300000, null, null);
|
||||
_boss = Status.DEAD;
|
||||
long respawnTime = (Config.RAMONA_SPAWN_INTERVAL + getRandom(-Config.RAMONA_SPAWN_RANDOM, Config.RAMONA_SPAWN_RANDOM)) * 3600000;
|
||||
GlobalVariablesManager.getInstance().set(RAMONA_RESPAWN_VAR, System.currentTimeMillis() + respawnTime);
|
||||
startQuestTimer("RAMONA_UNLOCK", respawnTime, null, null);
|
||||
startQuestTimer("END_RAMONA", 90000, null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -348,15 +354,35 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
|
||||
{
|
||||
if (creature.isPlayer() && npc.isScriptValue(0) && (ZONE.getCharactersInside().size() >= MIN_PLAYER_COUNT))
|
||||
npc.setIsInvul(true);
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null);
|
||||
npc.setScriptValue(1);
|
||||
_invisible = npc;
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null, true);
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case RAMONA_1:
|
||||
{
|
||||
_boss = Status.IN_FIGHT;
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Ramona();
|
||||
|
@ -2334,7 +2334,15 @@
|
||||
<height normal="47.5" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26141" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<npc id="26141" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2355,6 +2363,9 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2366,8 +2377,17 @@
|
||||
<height normal="87" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26142" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<npc id="26142" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2388,6 +2408,10 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2400,7 +2424,20 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26143" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<skill name="Skill04_ID" id="16646" level="1" />
|
||||
<skill name="Skill04_ID" id="16647" level="1" />
|
||||
<param name="Skill01_Probablity" value="300" />
|
||||
<param name="Skill02_Probablity" value="300" />
|
||||
<param name="Skill03_Probablity" value="300" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
<param name="Skill05_Probablity" value="500" />
|
||||
<param name="Skill06_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<acquire exp="576969277248" sp="1153938597" raidPoints="300" />
|
||||
@ -2419,10 +2456,16 @@
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
<skill id="5465" level="1" /> <!-- Earth Attack -->
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="16746" level="1" /> <!-- Ramona -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="14804" level="10" /> <!-- Damage Reflection Attack Resistance -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
<skill id="16646" level="1"/> <!-- Hyper Mega Telekinesis -->
|
||||
<skill id="16647" level="1"/> <!-- Ultra Mega Telekinesis -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2506,6 +2549,12 @@
|
||||
</dropLists>
|
||||
</npc>
|
||||
<npc id="26144" level="104" type="Monster" name="Dancer of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16681" level="1" />
|
||||
<skill name="Skill02_ID" id="16677" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2528,6 +2577,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16681" level="1" /> <!-- For the Queen -->
|
||||
<skill id="16677" level="1" /> <!-- Hyper Power -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2540,6 +2591,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26145" level="104" type="Monster" name="Commander of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16682" level="1" />
|
||||
<skill name="Skill02_ID" id="16680" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2562,6 +2619,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16682" level="1" /> <!-- Doom Hammer -->
|
||||
<skill id="16680" level="1" /> <!-- Commander Aggression Aura -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2574,6 +2633,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26146" level="104" type="Monster" name="Shooter of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16683" level="1" />
|
||||
<skill name="Skill02_ID" id="16684" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2596,6 +2661,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16683" level="1" /> <!-- Stun Shot -->
|
||||
<skill id="16684" level="1" /> <!-- Multi Shot -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2608,6 +2675,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26147" level="104" type="Monster" name="Wizard of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16685" level="1" />
|
||||
<skill name="Skill02_ID" id="16686" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2630,6 +2703,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16685" level="1" /> <!-- Ultra Plasma Ball -->
|
||||
<skill id="16686" level="1" /> <!-- Ultra Plasma Wave -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
|
@ -461,30 +461,76 @@
|
||||
<skill id="16731" toLevel="1" name="Leaking Magic - Attack">
|
||||
<!-- The physical attack and magic attack of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1059</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16732" toLevel="1" name="Leaking Magic - Defense">
|
||||
<!-- The physical defense and magic defense of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1478</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16733" toLevel="1" name="Leaking Magic - HP">
|
||||
<!-- The HP regen of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1044</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="HpRegen">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16734" toLevel="1" name="Leaking Magic - Eradication">
|
||||
<!-- The Queen and her minions continuously receive massive damage fur to the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1108</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<isDebuff>1</isDebuff>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<conditions>
|
||||
<condition name="OpTargetPc" /> <!-- TODO -->
|
||||
<condition name="OpResurrection" /> <!-- TODO -->
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="BlockResurrection" /> <!-- TODO -->
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16735" toLevel="10" name="Inherent Abilities - Blackbird Clan Talisman">
|
||||
<!-- Damage received from Demons -$s1. -->
|
||||
|
@ -2261,4 +2261,44 @@
|
||||
<node X="-14188" Y="254493" />
|
||||
<node X="-14650" Y="254393" />
|
||||
</zone>
|
||||
<!-- Ramona -->
|
||||
<zone name="ramona_magic_attack" id="200109" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16731-1;" /> <!-- Leaking Magic - Attack -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_defence" id="200110" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16732-1;" /> <!-- Leaking Magic - Defense -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200111" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16733-1;" /> <!-- Leaking Magic - HP -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200112" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="true"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16734-1;" /> <!-- eaking Magic - Eradication -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
</list>
|
@ -187,7 +187,7 @@
|
||||
<zone name="Heart_Trasken_Zone" id="12109" type="NoSummonFriendZone" shape="Cylinder" minZ="-16000" maxZ="16000" rad="2500">
|
||||
<node X="88110" Y="-173795" />
|
||||
</zone>
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10050" rad="3000">
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="Helios_Zone" id="210109" type="NoSummonFriendZone" shape="Cylinder" minZ="3400" maxZ="3600" rad="3100">
|
||||
|
@ -898,6 +898,11 @@ public class Config
|
||||
public static int HELIOS_MIN_PLAYER;
|
||||
public static int HELIOS_MIN_PLAYER_LVL;
|
||||
|
||||
// Ramona
|
||||
public static int RAMONA_SPAWN_INTERVAL;
|
||||
public static int RAMONA_SPAWN_RANDOM;
|
||||
public static int RAMONA_MIN_PLAYER;
|
||||
|
||||
// Fafurion
|
||||
public static int FAFURION_WAIT_TIME;
|
||||
public static int FAFURION_SPAWN_INTERVAL;
|
||||
@ -2488,6 +2493,10 @@ public class Config
|
||||
HELIOS_MIN_PLAYER = GrandBossSettings.getInt("HeliosMinPlayers", 70);
|
||||
HELIOS_MIN_PLAYER_LVL = GrandBossSettings.getInt("HeliosMinPlayerLvl", 102);
|
||||
|
||||
RAMONA_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfRamonaSpawn", 72);
|
||||
RAMONA_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfRamonaSpawn", 48);
|
||||
RAMONA_MIN_PLAYER = GrandBossSettings.getInt("RamonaMinPlayers", 7);
|
||||
|
||||
FAFURION_WAIT_TIME = GrandBossSettings.getInt("FafurionWaitTime", 10);
|
||||
FAFURION_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfFafurionSpawn", 264);
|
||||
FAFURION_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfFafurionSpawn", 72);
|
||||
|
@ -166,6 +166,19 @@ LindviorMaxPlayers = 112
|
||||
# Minimum players Level for enter to Lindvior. Retail: 99
|
||||
LindviorMinPlayerLvl = 99
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Ramona
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
# Interval time of Ramona. Value is hour. Range 1-480
|
||||
IntervalOfRamonaSpawn = 72
|
||||
|
||||
# Random interval. Range 1-192
|
||||
RandomOfRamonaSpawn = 48
|
||||
|
||||
# Minimal count of players for enter to Ramona. Retail: 7
|
||||
RamonaMinPlayers = 7
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Helios
|
||||
# ---------------------------------------------------------------------------
|
||||
|
@ -18,9 +18,11 @@ package ai.bosses.Ramona;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
||||
import org.l2jmobius.Config;
|
||||
import org.l2jmobius.commons.util.Rnd;
|
||||
import org.l2jmobius.gameserver.data.xml.impl.SkillData;
|
||||
import org.l2jmobius.gameserver.enums.ChatType;
|
||||
import org.l2jmobius.gameserver.enums.Movie;
|
||||
import org.l2jmobius.gameserver.instancemanager.GlobalVariablesManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.MapRegionManager;
|
||||
import org.l2jmobius.gameserver.instancemanager.ZoneManager;
|
||||
import org.l2jmobius.gameserver.model.Location;
|
||||
@ -32,8 +34,10 @@ import org.l2jmobius.gameserver.model.actor.Npc;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.DoorInstance;
|
||||
import org.l2jmobius.gameserver.model.actor.instance.PlayerInstance;
|
||||
import org.l2jmobius.gameserver.model.quest.QuestTimer;
|
||||
import org.l2jmobius.gameserver.model.skills.Skill;
|
||||
import org.l2jmobius.gameserver.model.zone.type.EffectZone;
|
||||
import org.l2jmobius.gameserver.model.zone.type.NoSummonFriendZone;
|
||||
import org.l2jmobius.gameserver.network.NpcStringId;
|
||||
import org.l2jmobius.gameserver.network.serverpackets.OnEventTrigger;
|
||||
|
||||
import ai.AbstractNpcAI;
|
||||
|
||||
@ -44,9 +48,16 @@ import ai.AbstractNpcAI;
|
||||
*/
|
||||
public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
// Status
|
||||
private static enum Status
|
||||
{
|
||||
ALIVE,
|
||||
IN_FIGHT,
|
||||
DEAD
|
||||
}
|
||||
|
||||
// NPC
|
||||
private static final int ROOM_CONTROL = 19642;
|
||||
private static final int INVISIBLE = 19643;
|
||||
private static final int MP_CONTROL = 19642;
|
||||
private static final int RAMONA = 19648;
|
||||
private static final int RAMONA_1 = 26141;
|
||||
private static final int RAMONA_2 = 26142;
|
||||
@ -58,58 +69,48 @@ public class Ramona extends AbstractNpcAI
|
||||
26146, // Shooter of the Queen
|
||||
26147 // Wizard of the Queen
|
||||
};
|
||||
// skill
|
||||
private static final Skill HYPER_MEGA_PLASMA_SHOT = SkillData.getInstance().getSkill(16641, 1);
|
||||
private static final Skill HYPER_MEGA_PLASMA_BRUST = SkillData.getInstance().getSkill(16642, 1);
|
||||
private static final Skill HIPER_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16643, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING = SkillData.getInstance().getSkill(16644, 1);
|
||||
private static final Skill RIDE_THE_LIGHTING_MEGA_BRUST = SkillData.getInstance().getSkill(16645, 1);
|
||||
private static final Skill ULTRA_MEGA_TELEKINESS = SkillData.getInstance().getSkill(16647, 1);
|
||||
private static final Skill[] RAMONA1_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING
|
||||
};
|
||||
private static final Skill[] RAMONA2_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST
|
||||
};
|
||||
private static final Skill[] RAMONA3_SKILLS =
|
||||
{
|
||||
HYPER_MEGA_PLASMA_BRUST,
|
||||
HYPER_MEGA_PLASMA_SHOT,
|
||||
RIDE_THE_LIGHTING,
|
||||
RIDE_THE_LIGHTING_MEGA_BRUST,
|
||||
HIPER_MEGA_TELEKINESS,
|
||||
ULTRA_MEGA_TELEKINESS
|
||||
};
|
||||
// Trigers
|
||||
private static final int FIRST_GENERATOR = 22230702;
|
||||
private static final int SECOND_GENERATOR = 22230704;
|
||||
private static final int THRID_GENERATOR = 22230706;
|
||||
private static final int FOURTH_GENERATOR = 22230708;
|
||||
// Locations
|
||||
private static final Location RAMONA_SPAWN_LOC_1 = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC_2 = new Location(86327, 169759, -10465, 16383);
|
||||
private static final Location DEFAULT_LOC = new Location(86338, 172099, -10602, 16383);
|
||||
private static final Location RAMONA_SPAWN_LOC = new Location(86327, 169759, -10465, 16383);
|
||||
// Other
|
||||
private static final int ROOM_CONTROL_DOOR = 22230711;
|
||||
private static final NoSummonFriendZone ZONE = ZoneManager.getInstance().getZoneById(210108, NoSummonFriendZone.class);
|
||||
private static final int MIN_PLAYER_COUNT = 14;
|
||||
private static final EffectZone ZONE_ATTACK = ZoneManager.getInstance().getZoneById(200109, EffectZone.class);
|
||||
private static final EffectZone ZONE_DEFENCE = ZoneManager.getInstance().getZoneById(200110, EffectZone.class);
|
||||
private static final EffectZone ZONE_HP = ZoneManager.getInstance().getZoneById(200111, EffectZone.class);
|
||||
private static final EffectZone ZONE_ERADICATION = ZoneManager.getInstance().getZoneById(200112, EffectZone.class);
|
||||
// Vars
|
||||
private static DoorInstance _door;
|
||||
private static final String RAMONA_RESPAWN_VAR = "RamonaRespawn";
|
||||
private static Status _boss = Status.ALIVE;
|
||||
private static ArrayList<Npc> _minions = new ArrayList<>();
|
||||
private static int _bossStage;
|
||||
private static long _lastAction;
|
||||
private static Npc _invisible;
|
||||
private static Npc _ramona1;
|
||||
private static Npc _ramona2;
|
||||
private static Npc _ramona3;
|
||||
|
||||
private Ramona()
|
||||
{
|
||||
addStartNpc(ROOM_CONTROL);
|
||||
addKillId(ROOM_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(INVISIBLE);
|
||||
addAttackId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addStartNpc(MP_CONTROL);
|
||||
addKillId(MP_CONTROL, RAMONA_3);
|
||||
addSeeCreatureId(MP_CONTROL);
|
||||
addAttackId(MP_CONTROL, RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
addSpawnId(RAMONA_1, RAMONA_2, RAMONA_3);
|
||||
|
||||
final long temp = GlobalVariablesManager.getInstance().getLong(RAMONA_RESPAWN_VAR, 0) - System.currentTimeMillis();
|
||||
if (temp > 0)
|
||||
{
|
||||
_boss = Status.DEAD;
|
||||
startQuestTimer("RAMONA_UNLOCK", temp, null, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -117,16 +118,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (event)
|
||||
{
|
||||
case "RAMONA_UNLOCK":
|
||||
{
|
||||
_boss = Status.ALIVE;
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_MS":
|
||||
{
|
||||
addSpawn(ROOM_CONTROL, RAMONA_SPAWN_LOC_1, false, 600000, false);
|
||||
addSpawn(RAMONA, RAMONA_SPAWN_LOC_2, false, 600000, false);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (ZONE.getCharactersInside().size() >= Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.setIsInvul(false);
|
||||
cancelQuestTimers("SPAWN_MS");
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 5000, null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_1":
|
||||
{
|
||||
_bossStage = 1;
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, Npc.class, 3000, ramona ->
|
||||
{
|
||||
if (ramona.getId() == RAMONA)
|
||||
@ -134,91 +144,53 @@ public class Ramona extends AbstractNpcAI
|
||||
ramona.deleteMe();
|
||||
}
|
||||
});
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC_1, false, 1200000, true);
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null, true);
|
||||
startQuestTimer("RAMONA1_SKILL", 6000, _ramona1, null);
|
||||
_ramona1 = addSpawn(RAMONA_1, RAMONA_SPAWN_LOC, false, 1200000, true);
|
||||
startQuestTimer("GENERATOR_1", getRandom(300000, 600000), null, null);
|
||||
startQuestTimer("GENERATOR_2", getRandom(900000, 1200000), null, null);
|
||||
startQuestTimer("GENERATOR_3", getRandom(1500000, 1800000), null, null);
|
||||
startQuestTimer("GENERATOR_4", getRandom(2100000, 2400000), null, null);
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case "RAMONA1_SKILL":
|
||||
case "GENERATOR_1":
|
||||
{
|
||||
if ((_bossStage == 1) && _ramona1.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA1_SKILLS[Rnd.get(RAMONA1_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona1.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FIRST_GENERATOR, true));
|
||||
ZONE_ATTACK.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS":
|
||||
case "GENERATOR_2":
|
||||
{
|
||||
_bossStage = 2;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA2_SKILL", 6000, _ramona2, null);
|
||||
ZONE.broadcastPacket(new OnEventTrigger(SECOND_GENERATOR, true));
|
||||
ZONE_DEFENCE.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "RAMONA2_SKILL":
|
||||
case "GENERATOR_3":
|
||||
{
|
||||
if ((_bossStage == 2) && _ramona2.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA2_SKILLS[Rnd.get(RAMONA2_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona2.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(THRID_GENERATOR, true));
|
||||
ZONE_HP.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "SPAWN_RAMONA_MINIONS_1":
|
||||
case "GENERATOR_4":
|
||||
{
|
||||
_bossStage = 3;
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.setRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, player);
|
||||
_minions.add(minion);
|
||||
}
|
||||
startQuestTimer("RAMONA3_SKILL", 6000, _ramona3, null);
|
||||
break;
|
||||
}
|
||||
case "RAMONA3_SKILL":
|
||||
{
|
||||
if ((_bossStage == 3) && _ramona3.isInCombat())
|
||||
{
|
||||
Skill randomAttackSkill = RAMONA3_SKILLS[Rnd.get(RAMONA3_SKILLS.length)];
|
||||
if (getRandom(100) > 20)
|
||||
{
|
||||
_ramona3.doCast(randomAttackSkill);
|
||||
}
|
||||
}
|
||||
ZONE.broadcastPacket(new OnEventTrigger(FOURTH_GENERATOR, true));
|
||||
ZONE_ERADICATION.setEnabled(true);
|
||||
break;
|
||||
}
|
||||
case "CHECK_ACTIVITY_TASK":
|
||||
{
|
||||
if ((_lastAction + 900000) < System.currentTimeMillis())
|
||||
{
|
||||
// GrandBossManager.getInstance().setBossStatus(RAMONA, ALIVE);
|
||||
for (Creature creature : ZONE.getCharactersInside())
|
||||
for (Creature charInside : ZONE.getCharactersInside())
|
||||
{
|
||||
if (creature != null)
|
||||
if (charInside != null)
|
||||
{
|
||||
if (creature.isNpc())
|
||||
if (charInside.isNpc())
|
||||
{
|
||||
creature.deleteMe();
|
||||
charInside.deleteMe();
|
||||
}
|
||||
else if (creature.isPlayer())
|
||||
else if (charInside.isPlayer())
|
||||
{
|
||||
creature.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(creature, TeleportWhereType.TOWN));
|
||||
charInside.teleToLocation(MapRegionManager.getInstance().getTeleToLocation(charInside, TeleportWhereType.TOWN));
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,22 +198,12 @@ public class Ramona extends AbstractNpcAI
|
||||
}
|
||||
else
|
||||
{
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 60000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "CANCEL_TIMERS":
|
||||
{
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
startQuestTimer("CHECK_ACTIVITY_TASK", 30000, null, null);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case "END_RAMONA":
|
||||
{
|
||||
_bossStage = 0;
|
||||
ZONE.oustAllPlayers();
|
||||
if (_ramona1 != null)
|
||||
{
|
||||
@ -266,9 +228,29 @@ public class Ramona extends AbstractNpcAI
|
||||
minion.deleteMe();
|
||||
}
|
||||
}
|
||||
if ((_boss == Status.ALIVE) || (_boss == Status.IN_FIGHT))
|
||||
{
|
||||
addSpawn(MP_CONTROL, RAMONA_SPAWN_LOC, false, 0, false);
|
||||
}
|
||||
QuestTimer activityTimer = getQuestTimer("CHECK_ACTIVITY_TASK", null, null);
|
||||
if (activityTimer != null)
|
||||
{
|
||||
activityTimer.cancel();
|
||||
}
|
||||
for (int i = FIRST_GENERATOR; i <= FOURTH_GENERATOR; i++)
|
||||
{
|
||||
ZONE.broadcastPacket(new OnEventTrigger(i, false));
|
||||
}
|
||||
ZONE_ATTACK.setEnabled(false);
|
||||
ZONE_DEFENCE.setEnabled(false);
|
||||
ZONE_HP.setEnabled(false);
|
||||
ZONE_ERADICATION.setEnabled(false);
|
||||
cancelQuestTimers("GENERATOR_1");
|
||||
cancelQuestTimers("GENERATOR_2");
|
||||
cancelQuestTimers("GENERATOR_3");
|
||||
cancelQuestTimers("GENERATOR_4");
|
||||
addSpawn(RAMONA, DEFAULT_LOC, false, 0, false);
|
||||
_minions.clear();
|
||||
_invisible.setScriptValue(0);
|
||||
_door.setTargetable(true);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -278,38 +260,61 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onAttack(Npc npc, PlayerInstance attacker, int damage, boolean isSummon)
|
||||
{
|
||||
double currentHp = (npc.getCurrentHp() / npc.getMaxHp()) * 100;
|
||||
switch (npc.getId())
|
||||
{
|
||||
case MP_CONTROL:
|
||||
{
|
||||
if (ZONE.getCharactersInside().size() < Config.RAMONA_MIN_PLAYER)
|
||||
{
|
||||
npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WHAT_S_UP_WITH_YOUR_EYES_YOU_NEED_MORE_ENERGY);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_1:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 75)
|
||||
if (npc.getCurrentHpPercent() < 75)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_A);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona2 = addSpawn(RAMONA_2, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona2.setCurrentHp(_ramona1.getCurrentHp());
|
||||
_ramona1.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS", 6000, _ramona2, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if (currentHp < 50)
|
||||
if (npc.getCurrentHpPercent() < 50)
|
||||
{
|
||||
playMovie(ZONE.getPlayersInside(), Movie.SC_RAMONA_TRANS_B);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC_1, false, 1200000, false);
|
||||
_ramona3 = addSpawn(RAMONA_3, RAMONA_SPAWN_LOC, false, 1200000, false);
|
||||
_ramona3.setCurrentHp(_ramona2.getCurrentHp());
|
||||
_ramona2.deleteMe();
|
||||
startQuestTimer("SPAWN_RAMONA_MINIONS_1", 6000, _ramona3, null);
|
||||
for (int i = 0; i < 7; i++)
|
||||
{
|
||||
final Npc minion = addSpawn(MINION_LIST[Rnd.get(MINION_LIST.length)], npc.getX() + getRandom(-200, 200), npc.getY() + getRandom(-200, 200), npc.getZ(), npc.getHeading(), false, 600000);
|
||||
minion.isRunning();
|
||||
((Attackable) minion).setIsRaidMinion(true);
|
||||
addAttackPlayerDesire(minion, attacker);
|
||||
_minions.add(minion);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
if ((npc.getCurrentHpPercent() < 25) && npc.isScriptValue(2))
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
npc.setScriptValue(1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -321,24 +326,25 @@ public class Ramona extends AbstractNpcAI
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case ROOM_CONTROL:
|
||||
case MP_CONTROL:
|
||||
{
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, Door ->
|
||||
World.getInstance().forEachVisibleObjectInRange(npc, DoorInstance.class, 8000, door ->
|
||||
{
|
||||
if (Door.getId() == ROOM_CONTROL_DOOR)
|
||||
if (door.getId() == ROOM_CONTROL_DOOR)
|
||||
{
|
||||
Door.closeMe();
|
||||
Door.setTargetable(false);
|
||||
_door = Door;
|
||||
door.closeMe();
|
||||
}
|
||||
});
|
||||
startQuestTimer("SPAWN_RAMONA_1", 5000, npc, null);
|
||||
startQuestTimer("SPAWN_RAMONA_1", 10000, npc, null);
|
||||
break;
|
||||
}
|
||||
case RAMONA_3:
|
||||
{
|
||||
notifyEvent("CANCEL_TIMERS", null, null);
|
||||
startQuestTimer("END_RAMONA", 300000, null, null);
|
||||
_boss = Status.DEAD;
|
||||
long respawnTime = (Config.RAMONA_SPAWN_INTERVAL + getRandom(-Config.RAMONA_SPAWN_RANDOM, Config.RAMONA_SPAWN_RANDOM)) * 3600000;
|
||||
GlobalVariablesManager.getInstance().set(RAMONA_RESPAWN_VAR, System.currentTimeMillis() + respawnTime);
|
||||
startQuestTimer("RAMONA_UNLOCK", respawnTime, null, null);
|
||||
startQuestTimer("END_RAMONA", 90000, null, null);
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -348,15 +354,35 @@ public class Ramona extends AbstractNpcAI
|
||||
@Override
|
||||
public String onSeeCreature(Npc npc, Creature creature, boolean isSummon)
|
||||
{
|
||||
if (creature.isPlayer() && npc.isScriptValue(0) && (ZONE.getCharactersInside().size() >= MIN_PLAYER_COUNT))
|
||||
npc.setIsInvul(true);
|
||||
if (creature.isPlayer())
|
||||
{
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null);
|
||||
npc.setScriptValue(1);
|
||||
_invisible = npc;
|
||||
startQuestTimer("SPAWN_MS", 10000, npc, null, true);
|
||||
}
|
||||
return super.onSeeCreature(npc, creature, isSummon);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String onSpawn(Npc npc)
|
||||
{
|
||||
switch (npc.getId())
|
||||
{
|
||||
case RAMONA_1:
|
||||
{
|
||||
_boss = Status.IN_FIGHT;
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
case RAMONA_2:
|
||||
case RAMONA_3:
|
||||
{
|
||||
_lastAction = System.currentTimeMillis();
|
||||
break;
|
||||
}
|
||||
}
|
||||
return super.onSpawn(npc);
|
||||
}
|
||||
|
||||
public static void main(String[] args)
|
||||
{
|
||||
new Ramona();
|
||||
|
@ -2334,7 +2334,15 @@
|
||||
<height normal="47.5" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26141" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<npc id="26141" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2355,6 +2363,9 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2366,8 +2377,17 @@
|
||||
<height normal="87" />
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26142" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<npc id="26142" level="104" type="Monster" name="Ramona" title="Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
<param name="Skill03_Probablity" value="500" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<stats str="164" int="188" dex="55" wit="78" con="111" men="149">
|
||||
@ -2388,6 +2408,10 @@
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2400,7 +2424,20 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26143" level="104" type="RaidBoss" name="Ramona" title="Queen">
|
||||
<!-- Source: www.l2wiki.com -->
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16641" level="1" />
|
||||
<skill name="Skill02_ID" id="16642" level="1" />
|
||||
<skill name="Skill03_ID" id="16644" level="1" />
|
||||
<skill name="Skill04_ID" id="16645" level="1" />
|
||||
<skill name="Skill04_ID" id="16646" level="1" />
|
||||
<skill name="Skill04_ID" id="16647" level="1" />
|
||||
<param name="Skill01_Probablity" value="300" />
|
||||
<param name="Skill02_Probablity" value="300" />
|
||||
<param name="Skill03_Probablity" value="300" />
|
||||
<param name="Skill04_Probablity" value="300" />
|
||||
<param name="Skill05_Probablity" value="500" />
|
||||
<param name="Skill06_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>FEMALE</sex>
|
||||
<acquire exp="576969277248" sp="1153938597" raidPoints="300" />
|
||||
@ -2419,10 +2456,16 @@
|
||||
</stats>
|
||||
<skillList>
|
||||
<skill id="4416" level="11" /> <!-- Giants -->
|
||||
<skill id="5465" level="1" /> <!-- Earth Attack -->
|
||||
<skill id="4494" level="1" /> <!-- Raid Boss -->
|
||||
<skill id="16746" level="1" /> <!-- Ramona -->
|
||||
<skill id="5465" level="1"/> <!-- Earth Attack -->
|
||||
<skill id="16746" level="1"/> <!-- Ramona -->
|
||||
<skill id="14804" level="10" /> <!-- Damage Reflection Attack Resistance -->
|
||||
<skill id="16642" level="1"/> <!-- Hyper Mega Plasma Burst -->
|
||||
<skill id="16641" level="1"/> <!-- Hyper Mega Plasma Shot -->
|
||||
<skill id="16644" level="1"/> <!-- Ride the Lightning -->
|
||||
<skill id="16645" level="1"/> <!-- Ride the Lightning Mega Burst -->
|
||||
<skill id="16646" level="1"/> <!-- Hyper Mega Telekinesis -->
|
||||
<skill id="16647" level="1"/> <!-- Ultra Mega Telekinesis -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2506,6 +2549,12 @@
|
||||
</dropLists>
|
||||
</npc>
|
||||
<npc id="26144" level="104" type="Monster" name="Dancer of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16681" level="1" />
|
||||
<skill name="Skill02_ID" id="16677" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2528,6 +2577,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16681" level="1" /> <!-- For the Queen -->
|
||||
<skill id="16677" level="1" /> <!-- Hyper Power -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2540,6 +2591,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26145" level="104" type="Monster" name="Commander of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16682" level="1" />
|
||||
<skill name="Skill02_ID" id="16680" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2562,6 +2619,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16682" level="1" /> <!-- Doom Hammer -->
|
||||
<skill id="16680" level="1" /> <!-- Commander Aggression Aura -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2574,6 +2633,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26146" level="104" type="Monster" name="Shooter of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16683" level="1" />
|
||||
<skill name="Skill02_ID" id="16684" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2596,6 +2661,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16683" level="1" /> <!-- Stun Shot -->
|
||||
<skill id="16684" level="1" /> <!-- Multi Shot -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
@ -2608,6 +2675,12 @@
|
||||
</collision>
|
||||
</npc>
|
||||
<npc id="26147" level="104" type="Monster" name="Wizard of the Queen">
|
||||
<parameters>
|
||||
<skill name="Skill01_ID" id="16685" level="1" />
|
||||
<skill name="Skill02_ID" id="16686" level="1" />
|
||||
<param name="Skill01_Probablity" value="500" />
|
||||
<param name="Skill02_Probablity" value="500" />
|
||||
</parameters>
|
||||
<race>GIANT</race>
|
||||
<sex>MALE</sex>
|
||||
<acquire exp="0" sp="0" />
|
||||
@ -2630,6 +2703,8 @@
|
||||
<skill id="4461" level="1" /> <!-- Dagger/Rapier Vulnerability -->
|
||||
<skill id="16608" level="1" /> <!-- Servitor Attack Weakness -->
|
||||
<skill id="4071" level="1" /> <!-- Bow/Crossbow Resistance -->
|
||||
<skill id="16685" level="1" /> <!-- Ultra Plasma Ball -->
|
||||
<skill id="16686" level="1" /> <!-- Ultra Plasma Wave -->
|
||||
</skillList>
|
||||
<ai clanHelpRange="400">
|
||||
<clanList>
|
||||
|
@ -461,30 +461,76 @@
|
||||
<skill id="16731" toLevel="1" name="Leaking Magic - Attack">
|
||||
<!-- The physical attack and magic attack of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1059</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MAtk">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16732" toLevel="1" name="Leaking Magic - Defense">
|
||||
<!-- The physical defense and magic defense of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1478</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="PhysicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
<effect name="MagicalDefence">
|
||||
<amount>10</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16733" toLevel="1" name="Leaking Magic - HP">
|
||||
<!-- The HP regen of the Queen and her minions are boosted greatly by the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1044</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<targetType>SELF</targetType>
|
||||
<effectPoint>100</effectPoint>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<effects>
|
||||
<effect name="HpRegen">
|
||||
<amount>3</amount>
|
||||
<mode>PER</mode>
|
||||
</effect>
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16734" toLevel="1" name="Leaking Magic - Eradication">
|
||||
<!-- The Queen and her minions continuously receive massive damage fur to the magic leaking out of the disintegrating MP Control Unit. -->
|
||||
<icon>icon.skill1108</icon>
|
||||
<abnormalLvl>5</abnormalLvl>
|
||||
<abnormalTime>60</abnormalTime>
|
||||
<operateType>A2</operateType>
|
||||
<effectPoint>-100</effectPoint>
|
||||
<isDebuff>true</isDebuff>
|
||||
<targetType>SELF</targetType>
|
||||
<isDebuff>1</isDebuff>
|
||||
<affectScope>SINGLE</affectScope>
|
||||
<conditions>
|
||||
<condition name="OpTargetPc" /> <!-- TODO -->
|
||||
<condition name="OpResurrection" /> <!-- TODO -->
|
||||
</conditions>
|
||||
<effects>
|
||||
<effect name="BlockResurrection" /> <!-- TODO -->
|
||||
</effects>
|
||||
</skill>
|
||||
<skill id="16735" toLevel="10" name="Inherent Abilities - Blackbird Clan Talisman">
|
||||
<!-- Damage received from Demons -$s1. -->
|
||||
|
@ -2261,4 +2261,44 @@
|
||||
<node X="-14188" Y="254493" />
|
||||
<node X="-14650" Y="254393" />
|
||||
</zone>
|
||||
<!-- Ramona -->
|
||||
<zone name="ramona_magic_attack" id="200109" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16731-1;" /> <!-- Leaking Magic - Attack -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_defence" id="200110" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16732-1;" /> <!-- Leaking Magic - Defense -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200111" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="targetClass" val="Npc" />
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="false"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16733-1;" /> <!-- Leaking Magic - HP -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="ramona_magic_hp" id="200112" type="EffectZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<stat name="chance" val="100" />
|
||||
<stat name="default_enabled" val="false" />
|
||||
<stat name="showDangerIcon" val="true"/>
|
||||
<stat name="initialDelay" val="3000" />
|
||||
<!-- <stat name="unitTick" val="20" /> -->
|
||||
<stat name="skillIdLvl" val="16734-1;" /> <!-- eaking Magic - Eradication -->
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
</list>
|
@ -187,7 +187,7 @@
|
||||
<zone name="Heart_Trasken_Zone" id="12109" type="NoSummonFriendZone" shape="Cylinder" minZ="-16000" maxZ="16000" rad="2500">
|
||||
<node X="88110" Y="-173795" />
|
||||
</zone>
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10050" rad="3000">
|
||||
<zone name="Ramona_Room" id="210108" type="NoSummonFriendZone" shape="Cylinder" minZ="-10610" maxZ="-10150" rad="4000" >
|
||||
<node X="78023" Y="172262" />
|
||||
</zone>
|
||||
<zone name="Helios_Zone" id="210109" type="NoSummonFriendZone" shape="Cylinder" minZ="3400" maxZ="3600" rad="3100">
|
||||
|
@ -897,6 +897,11 @@ public class Config
|
||||
public static int HELIOS_MIN_PLAYER;
|
||||
public static int HELIOS_MIN_PLAYER_LVL;
|
||||
|
||||
// Ramona
|
||||
public static int RAMONA_SPAWN_INTERVAL;
|
||||
public static int RAMONA_SPAWN_RANDOM;
|
||||
public static int RAMONA_MIN_PLAYER;
|
||||
|
||||
// Fafurion
|
||||
public static int FAFURION_WAIT_TIME;
|
||||
public static int FAFURION_SPAWN_INTERVAL;
|
||||
@ -2486,6 +2491,10 @@ public class Config
|
||||
HELIOS_MIN_PLAYER = GrandBossSettings.getInt("HeliosMinPlayers", 70);
|
||||
HELIOS_MIN_PLAYER_LVL = GrandBossSettings.getInt("HeliosMinPlayerLvl", 102);
|
||||
|
||||
RAMONA_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfRamonaSpawn", 72);
|
||||
RAMONA_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfRamonaSpawn", 48);
|
||||
RAMONA_MIN_PLAYER = GrandBossSettings.getInt("RamonaMinPlayers", 7);
|
||||
|
||||
FAFURION_WAIT_TIME = GrandBossSettings.getInt("FafurionWaitTime", 10);
|
||||
FAFURION_SPAWN_INTERVAL = GrandBossSettings.getInt("IntervalOfFafurionSpawn", 264);
|
||||
FAFURION_SPAWN_RANDOM = GrandBossSettings.getInt("RandomOfFafurionSpawn", 72);
|
||||
|
Loading…
Reference in New Issue
Block a user