инст зона для группы

  • Автор темы Автор темы uter81
  • Дата начала Дата начала

uter81

Друг форума
Участник
Старожил I степени
Сообщения
470
Розыгрыши
0
Репутация
2
Реакции
19
Баллы
960
Хроники
  1. Master Class
Исходники
Присутствуют
Сборка
L2jmobius
всем привет, подскажите пожалуйста как убрать проверку на командный канал, что бы можно было входить группой 7 игроков.
в файле xml командный канал убран.


Код:
package instances.MessiahOuter;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Random;
import java.util.Set;

import org.l2jmobius.gameserver.enums.ChatType;
import org.l2jmobius.gameserver.enums.Movie;
import org.l2jmobius.gameserver.managers.ZoneManager;
import org.l2jmobius.gameserver.model.Location;
import org.l2jmobius.gameserver.model.actor.Creature;
import org.l2jmobius.gameserver.model.actor.Npc;
import org.l2jmobius.gameserver.model.actor.Player;
import org.l2jmobius.gameserver.model.instancezone.Instance;
import org.l2jmobius.gameserver.model.skill.Skill;
import org.l2jmobius.gameserver.model.skill.holders.SkillHolder;
import org.l2jmobius.gameserver.model.zone.ZoneType;
import org.l2jmobius.gameserver.model.zone.type.SayuneZone;
import org.l2jmobius.gameserver.network.NpcStringId;
import org.l2jmobius.gameserver.network.serverpackets.ExShowScreenMessage;
import org.l2jmobius.gameserver.util.ArrayUtil;

import instances.AbstractInstance;

public class MessiahOuter extends AbstractInstance
{
    // NPCs
    private static final int ERDA = 34319;
    private static final int LEONA = 34301;
    private static final int ELIKIA = 34302;
    private static final int DEVIANNE = 34303;
    private static final int SPORCHA = 34321;
    private static final int TELEPORTER = 34325;
    private static final int VIOLET = 34327;
    private static final int SOLDIER = 34300;
    // Monsters
    private static final int SIEGE_TANK = 24023;
    private static final int MAGIC_CANNON = 24042;
    private static final int[] MONSTERS =
    {
        24014,
        24015,
        24016,
        24017,
        24018,
        24019,
        24020,
        24021,
        24022,
        SIEGE_TANK,
        MAGIC_CANNON,
        24043,
        24044,
        24045,
        24046,
        24047,
        24048,
        24049,
    };
    private static final int CASTLE_RAIDER = 26230;
    private static final int POSLOF = 26231;
    private static final int RESURRECTED_CASTLE_ARCHER = 26232;
    private static final int ORC_MERCENARY = 26233;
    private static final int CASTLE_WIZARD = 26234;
    private static final int[] MINIONS =
    {
        CASTLE_RAIDER,
        POSLOF,
        RESURRECTED_CASTLE_ARCHER,
        ORC_MERCENARY,
        CASTLE_WIZARD
    };
    // Raid Bosses
    private static final int SAMPSON = 26199;
    private static final int HANSON = 26200;
    private static final int GROM = 26201;
    private static final int MEDVEZ = 26202;
    private static final int ZIGATAN = 26203;
    private static final int HUNCHBACK_KWAI = 26204;
    private static final int CORNIX = 26205;
    private static final int CARANIX = 26206;
    private static final int JONADAN = 26207;
    private static final int DEMIEN = 26208;
    private static final int BERK = 26209;
    private static final int TARKU = 26210;
    private static final int TARPIN = 26211;
    private static final int SAFE_VAULT = 26212;
    private static final int SECRET_VAULT = 26213;
    private static final int SAKUM = 26214;
    private static final int CRAZY_TYPHOON = 26215;
    private static final int CURSED_HAREN = 26216;
    private static final int FLYNT = 26217;
    private static final int HARP = 26218;
    private static final int MALISS = 26219;
    private static final int ISADORA = 26220;
    private static final int WHITRA = 26221;
    private static final int BLETRA = 26222;
    private static final int UPGRADED_SIEGE_TANK = 26223;
    private static final int VEGIMA = 26224;
    private static final int VARONIA = 26225;
    private static final int ARONIA = 26226;
    private static final int ODD = 26227;
    private static final int EVEN = 26228;
    private static final int NEMERTESS = 26229;
    private static final int[] BOSSES =
    {
        SAMPSON,
        HANSON,
        GROM,
        MEDVEZ,
        ZIGATAN,
        HUNCHBACK_KWAI,
        CORNIX,
        CARANIX,
        JONADAN,
        DEMIEN,
        BERK,
        TARKU,
        TARPIN,
        SAFE_VAULT,
        SECRET_VAULT,
        SAKUM,
        CRAZY_TYPHOON,
        CURSED_HAREN,
        FLYNT,
        HARP,
        MALISS,
        ISADORA,
        WHITRA,
        BLETRA,
        UPGRADED_SIEGE_TANK,
        VEGIMA,
        VARONIA,
        ARONIA,
        ODD,
        EVEN,
        NEMERTESS
    };
    // Skills
    private static final SkillHolder MASS_CHAIN_SMASH = new SkillHolder(16154, 1);
    private static final SkillHolder MASS_BLEED = new SkillHolder(16225, 1);
    private static final SkillHolder WIDE_STUN = new SkillHolder(16228, 1);
    private static final SkillHolder CRITICAL_SLASHER = new SkillHolder(16763, 1);
    private static final SkillHolder FATAL_STRIKE = new SkillHolder(16764, 1);
    private static final SkillHolder FATAL_SLASHER = new SkillHolder(16766, 1);
    private static final SkillHolder ENERGY_SPIKE = new SkillHolder(16768, 1);
    private static final SkillHolder ENERGY_BURST = new SkillHolder(16769, 1);
    private static final SkillHolder ENERGY_BLAST = new SkillHolder(16770, 1);
    private static final SkillHolder EMBRYO_BERSERKER = new SkillHolder(16889, 1);
    private static final SkillHolder EMBRYO_GUARDIAN = new SkillHolder(16890, 1);
    private static final SkillHolder[] CANNON_GROUP =
    {
        ENERGY_SPIKE,
        ENERGY_BLAST
    };
    private static final SkillHolder[] VAULT_GROUP =
    {
        CRITICAL_SLASHER,
        ENERGY_BURST
    };
    private static final SkillHolder[] FIGHTER_GROUP =
    {
        MASS_CHAIN_SMASH,
        MASS_BLEED,
        WIDE_STUN,
        CRITICAL_SLASHER,
        FATAL_STRIKE,
        FATAL_SLASHER
    };
    private static final SkillHolder[] MAGE_GROUP =
    {
        CRITICAL_SLASHER,
        ENERGY_SPIKE,
        ENERGY_BURST
    };
    // Locations
    private static final Location VIOLET_LOC = new Location(-248896, 132589, 1051);
    // Zones
    private static final int DEVIANNE_1 = 9000;
    private static final int DEVIANNE_2 = 9001;
    private static final int DEVIANNE_3 = 9002;
    private static final int ELIKIA_1 = 9003;
    private static final int ELIKIA_2 = 9004;
    private static final int ELIKIA_3 = 9005;
    private static final int SPORCHA_1 = 9006;
    private static final int SPORCHA_2 = 9007;
    private static final int SPORCHA_3 = 9008;
    private static final int LEONA_1 = 9009;
    private static final int LEONA_2 = 9010;
    private static final int LEONA_3 = 9011;
    private static final SayuneZone DEVIANNE_SAYUNE_1 = ZoneManager.getInstance().getZoneByName("Sayune_87", SayuneZone.class);
    private static final SayuneZone DEVIANNE_SAYUNE_2 = ZoneManager.getInstance().getZoneByName("Sayune_88", SayuneZone.class);
    private static final SayuneZone DEVIANNE_SAYUNE_3 = ZoneManager.getInstance().getZoneByName("Sayune_89", SayuneZone.class);
    private static final SayuneZone ELIKIA_SAYUNE_1 = ZoneManager.getInstance().getZoneByName("Sayune_90", SayuneZone.class);
    private static final SayuneZone ELIKIA_SAYUNE_2 = ZoneManager.getInstance().getZoneByName("Sayune_91", SayuneZone.class);
    private static final SayuneZone ELIKIA_SAYUNE_3 = ZoneManager.getInstance().getZoneByName("Sayune_92", SayuneZone.class);
    private static final SayuneZone SPORCHA_SAYUNE_1 = ZoneManager.getInstance().getZoneByName("Sayune_93", SayuneZone.class);
    private static final SayuneZone SPORCHA_SAYUNE_2 = ZoneManager.getInstance().getZoneByName("Sayune_94", SayuneZone.class);
    private static final SayuneZone SPORCHA_SAYUNE_3 = ZoneManager.getInstance().getZoneByName("Sayune_95", SayuneZone.class);
    private static final SayuneZone LEONA_SAYUNE_1 = ZoneManager.getInstance().getZoneByName("Sayune_96", SayuneZone.class);
    private static final SayuneZone LEONA_SAYUNE_2 = ZoneManager.getInstance().getZoneByName("Sayune_97", SayuneZone.class);
    private static final SayuneZone LEONA_SAYUNE_3 = ZoneManager.getInstance().getZoneByName("Sayune_98", SayuneZone.class);
    // Misc
    private static final int TEMPLATE_ID = 265;
    private static final int COND_MEMBERS = 21;
    private static final int COND_LEVEL = 107;
    final Set<Integer> bossSet = new HashSet<>();
    
    public MessiahOuter()
    {
        super(TEMPLATE_ID);
        addInstanceCreatedId(TEMPLATE_ID);
        addStartNpc(ERDA);
        addFirstTalkId(LEONA, ELIKIA, DEVIANNE, SPORCHA, TELEPORTER, VIOLET);
        addTalkId(LEONA, ELIKIA, DEVIANNE, SPORCHA, TELEPORTER, VIOLET);
        addSpawnId(SOLDIER);
        addSpawnId(MONSTERS);
        addSpawnId(BOSSES);
        addAttackId(BOSSES);
        addKillId(SIEGE_TANK, MAGIC_CANNON);
        addKillId(BOSSES);
        addEnterZoneId(DEVIANNE_1, DEVIANNE_2, DEVIANNE_3, ELIKIA_1, ELIKIA_2, ELIKIA_3, SPORCHA_1, SPORCHA_2, SPORCHA_3, LEONA_1, LEONA_2, LEONA_3);
    }
    
    @Override
    public void onInstanceCreated(Instance instance, Player player)
    {
        instance.getParameters().getInt("ALIVE_RAIDS", 12);
        
        for (int boss : BOSSES)
        {
            bossSet.add(boss);
        }
    }
    
    @Override
    public String onEvent(String event, Npc npc, Player player)
    {
        String htmltext = null;
        switch (event)
        {
            case "enterInstance":
            {
                if (player.isInCommandChannel())
                {
                    final List<Player> members = player.getCommandChannel().getMembers();
                    if (members.size() >= COND_MEMBERS)
                    {
                        for (Player member : members)
                        {
                            if (member.getLevel() >= COND_LEVEL)
                            {
                                if (!member.isInsideRadius3D(npc, 1000))
                                {
                                    player.sendMessage("Player " + member.getName() + " must come closer.");
                                }
                                enterInstance(member, npc, TEMPLATE_ID);
                            }
                            else
                            {
                                htmltext = "condNoLevel.html";
                                return htmltext;
                            }
                        }
                    }
                    else
                    {
                        htmltext = "condNoCommandChannel.html";
                        return htmltext;
                    }
                }
                else if (player.isGM())
                {
                    enterInstance(player, npc, TEMPLATE_ID);
                }
                else
                {
                    htmltext = "condNoCommandChannel.html";
                    return htmltext;
                }
                break;
            }
            case "toViolet":
            {
                final Instance instance = player.getInstanceWorld();
                if (isInInstance(instance))
                {
                    player.teleToLocation(VIOLET_LOC);
                }
                break;
            }
            case "soldierShoutRefresh":
            {
                final Instance instance = npc.getInstanceWorld();
                if (isInInstance(instance))
                {
                    instance.getParameters().set("SOLDIER_SHOUT", false);
                }
                break;
            }
        }
        return super.onEvent(event, npc, player);
    }
    
    @Override
    public String onSpawn(Npc npc)
    {
        final Instance instance = npc.getInstanceWorld();
        if (instance != null)
        {
            switch (npc.getId())
            {
                case SOLDIER:
                {
                    final boolean soldierShout = instance.getParameters().getBoolean("SOLDIER_SHOUT", false);
                    if (!soldierShout)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WE_LL_GUARD_THIS_PLACE_USE_THIS_SAYUNE_TO_TELEPORT_TO_THE_NEXT_AREA);
                        instance.getParameters().set("SOLDIER_SHOUT", true);
                        startQuestTimer("soldierShoutRefresh", 5000, npc, null);
                    }
                    break;
                }
                case SAMPSON:
                {
                    showOnScreenMsg(instance, NpcStringId.GUARD_CAPTAIN_SAMPSON_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.STOP_THE_INVADERS);
                    break;
                }
                case HANSON:
                {
                    showOnScreenMsg(instance, NpcStringId.GUARD_CAPTAIN_HANSON_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.STOP_THE_INVADERS);
                    break;
                }
                case GROM:
                {
                    showOnScreenMsg(instance, NpcStringId.DESTROYER_GROM_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.MY_BLOOD_BOILS_I_M_GAME);
                    break;
                }
                case MEDVEZ:
                {
                    showOnScreenMsg(instance, NpcStringId.EXECUTOR_BEAR_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.INVADERS_DESTROY);
                    break;
                }
                case ZIGATAN:
                {
                    showOnScreenMsg(instance, NpcStringId.THE_KNIGHT_OF_DARKNESS_ZIGATAN_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.I_HAVE_RETURNED_BY_THE_POWER_OF_DARKNESS);
                    break;
                }
                case HUNCHBACK_KWAI:
                {
                    showOnScreenMsg(instance, NpcStringId.HUNCHBACK_KWAI_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.FOR_ETIS_VAN_ETINA_OUR_LIVING_GOD);
                    break;
                }
                case CORNIX:
                {
                    showOnScreenMsg(instance, NpcStringId.SOUL_REAPER_CORNIX_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ALL_YOUR_SOULS_ARE_MINE);
                    break;
                }
                case CARANIX:
                {
                    showOnScreenMsg(instance, NpcStringId.SOUL_REAPER_CARANIX_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ALL_YOUR_SOULS_ARE_MINE);
                    break;
                }
                case JONADAN:
                {
                    showOnScreenMsg(instance, NpcStringId.CREED_GUARDIAN_JONADAN_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HEATHENS_YOU_RE_DESECRATING_THE_HOLY_GROUND);
                    break;
                }
                case DEMIEN:
                {
                    showOnScreenMsg(instance, NpcStringId.CREED_GUARDIAN_DEMIEN_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HEATHENS_YOU_RE_DESECRATING_THE_HOLY_GROUND);
                    break;
                }
                case BERK:
                {
                    showOnScreenMsg(instance, NpcStringId.HIGH_EXECUTOR_BERG_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.AARRGGHH_I_WILL_CRUSH_THEM_LIKE_BUGS);
                    break;
                }
                case TARKU:
                {
                    showOnScreenMsg(instance, NpcStringId.TARKU_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HAHAHA_WHAT_A_GREAT_PICK_ME_UP);
                    break;
                }
                case TARPIN:
                {
                    showOnScreenMsg(instance, NpcStringId.TARPIN_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HAHAHA_WHAT_A_GREAT_PICK_ME_UP);
                    break;
                }
                case SAFE_VAULT:
                {
                    showOnScreenMsg(instance, NpcStringId.EMBRYO_SAFE_VAULT_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THREATS_DETECTED_ACTIVATING_THE_SELF_DEFENSE_SYSTEM);
                    break;
                }
                case SECRET_VAULT:
                {
                    showOnScreenMsg(instance, NpcStringId.EMBRYO_SECRET_VAULT_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THREATS_DETECTED_ACTIVATING_THE_SELF_DEFENSE_SYSTEM);
                    break;
                }
                case SAKUM:
                {
                    showOnScreenMsg(instance, NpcStringId.ULTIMATE_SAKUM_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.KRRR);
                    break;
                }
                case CRAZY_TYPHOON:
                {
                    showOnScreenMsg(instance, NpcStringId.CRAZY_TYPHOON_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WAHAHA_BLOOD_WILL_BE_SPILT);
                    break;
                }
                case CURSED_HAREN:
                {
                    showOnScreenMsg(instance, NpcStringId.CURSED_HAREN_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.KELBIM_WHERE_ARE_YOU_YOU_WILL_PAY_FOR_YOUR_DEEDS);
                    break;
                }
                case FLYNT:
                {
                    showOnScreenMsg(instance, NpcStringId.EVIL_DESTRUCTOR_FLYNT_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ARGHH_2);
                    break;
                }
                case HARP:
                {
                    showOnScreenMsg(instance, NpcStringId.PERFECT_HARP_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.INITIATE_ANNIHILATION_PROCEDURE);
                    break;
                }
                case MALISS:
                {
                    showOnScreenMsg(instance, NpcStringId.BLOODY_HIGH_PRIESTESS_MALISS_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.COME_ENEMIES_OF_ETIS_VAN_ETINA_WE_SHALL_PREVAIL);
                    break;
                }
                case ISADORA:
                {
                    showOnScreenMsg(instance, NpcStringId.GREAT_SORCERESS_ISADORA_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.REMOVE_YOUR_PAWS_FROM_MALISS);
                    break;
                }
                case WHITRA:
                {
                    showOnScreenMsg(instance, NpcStringId.GUARDIAN_WHITRA_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THIS_IS_IT_LEONA_S_HOUNDS);
                    break;
                }
                case BLETRA:
                {
                    showOnScreenMsg(instance, NpcStringId.GUARDIAN_BLETRA_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.THIS_IS_IT_LEONA_S_HOUNDS);
                    break;
                }
                case UPGRADED_SIEGE_TANK:
                {
                    showOnScreenMsg(instance, NpcStringId.UPGRADED_SIEGE_TANK_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DEPLOYMENT_COMPLETE_ENTERING_COMBAT);
                    break;
                }
                case VEGIMA:
                {
                    showOnScreenMsg(instance, NpcStringId.VEGIMA_THE_DARK_SHAMAN_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.I_HAVE_RETURNED_BY_THE_POWER_OF_DARKNESS);
                    break;
                }
                case VARONIA:
                {
                    showOnScreenMsg(instance, NpcStringId.SOUL_REAPER_VARONIA_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ALL_YOUR_SOULS_ARE_MINE);
                    break;
                }
                case ARONIA:
                {
                    showOnScreenMsg(instance, NpcStringId.SOUL_REAPER_ARONIA_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ALL_YOUR_SOULS_ARE_MINE);
                    break;
                }
                case ODD:
                {
                    showOnScreenMsg(instance, NpcStringId.INQUISITOR_ODD_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOU_WILL_BE_JUDGED_HEATHENS);
                    break;
                }
                case EVEN:
                {
                    showOnScreenMsg(instance, NpcStringId.INQUISITOR_EVEN_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOU_WILL_BE_JUDGED_HEATHENS);
                    break;
                }
                case NEMERTESS:
                {
                    showOnScreenMsg(instance, NpcStringId.INCARNATION_OF_REVENGE_NEMERTESS_HAS_APPEARED, ExShowScreenMessage.TOP_CENTER, 5000, false);
                    npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.REMEMBER_MY_NAME);
                    break;
                }
            }
            npc.setRandomWalking(false);
        }
        return super.onSpawn(npc);
    }
    
    @Override
    public String onAttack(Npc npc, Player attacker, int damage, boolean isSummon, Skill skill)
    {
        final Instance instance = npc.getInstanceWorld();
        final Creature mostHated = npc.asAttackable().getMostHated();
        if (isInInstance(instance))
        {
            switch (npc.getId())
            {
                case SIEGE_TANK:
                case MAGIC_CANNON:
                {
                    npc.setTarget(mostHated);
                    npc.doCast(getRandomEntry(CANNON_GROUP).getSkill());
                    break;
                }
                case SAMPSON:
                {
                    final boolean sampson50 = instance.getParameters().getBoolean("SAMPSON_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !sampson50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.REINFORCEMENTS_CHARGE);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("SAMPSON_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case HANSON:
                {
                    final boolean hanson50 = instance.getParameters().getBoolean("HANSON_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !hanson50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.REINFORCEMENTS_CHARGE);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("HANSON_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case GROM:
                {
                    final boolean grom50 = instance.getParameters().getBoolean("GROM_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !grom50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.IT_S_ONLY_THE_BEGINNING);
                        npc.abortCast();
                        npc.doCast(EMBRYO_BERSERKER.getSkill());
                        instance.getParameters().set("GROM_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case MEDVEZ:
                {
                    final boolean medvez50 = instance.getParameters().getBoolean("MEDVEZ_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !medvez50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.I_CAN_NEVER_BE_DEFEATED);
                        npc.abortCast();
                        npc.doCast(EMBRYO_GUARDIAN.getSkill());
                        instance.getParameters().set("MEDVEZ_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case ZIGATAN:
                {
                    final boolean zigatan50 = instance.getParameters().getBoolean("ZIGATAN_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !zigatan50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.LORD_ETIS_VAN_ETINA_GRANT_US_UNHOLY_POWER);
                        npc.abortCast();
                        npc.doCast(EMBRYO_BERSERKER.getSkill());
                        instance.getParameters().set("ZIGATAN_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case HUNCHBACK_KWAI:
                {
                    final boolean kwai50 = instance.getParameters().getBoolean("KWAI_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !kwai50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GIVE_UP_YOUR_LIFE_FOR_ETIS_VAN_ETINA);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("KWAI_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case CORNIX:
                {
                    final boolean cornix50 = instance.getParameters().getBoolean("CORNIX_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !cornix50)
                    {
                        for (int i = 0; i < 8; i++)
                        {
                            npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RISE_MY_SLAVES);
                            addSpawn(RESURRECTED_CASTLE_ARCHER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("CORNIX_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case CARANIX:
                {
                    final boolean caranix50 = instance.getParameters().getBoolean("CARANIX_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !caranix50)
                    {
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(RESURRECTED_CASTLE_ARCHER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("CARANIX_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case JONADAN:
                {
                    final boolean jonadan50 = instance.getParameters().getBoolean("JONADAN_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !jonadan50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.CHARGE_AHEAD_DRIVE_OFF_THE_HEATHENS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("JONADAN_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case DEMIEN:
                {
                    final boolean demien50 = instance.getParameters().getBoolean("DEMIEN_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !demien50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.CHARGE_AHEAD_DRIVE_OFF_THE_HEATHENS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("DEMIEN_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case BERK:
                {
                    final boolean berk50 = instance.getParameters().getBoolean("BERK_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !berk50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.AARRGGHH_IT_HURTS_I_M_GOING_TO_DESTROY_THEM_ALL);
                        npc.abortCast();
                        npc.doCast(EMBRYO_GUARDIAN.getSkill());
                        instance.getParameters().set("BERK_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case TARKU:
                {
                    final boolean tarku50 = instance.getParameters().getBoolean("TARKU_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !tarku50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.TIME_TO_EARN_YOUR_PAY_YOU_SLOBS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(ORC_MERCENARY, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("TARKU_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case TARPIN:
                {
                    final boolean tarpin50 = instance.getParameters().getBoolean("TARPIN_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !tarpin50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.TIME_TO_EARN_YOUR_PAY_YOU_SLOBS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(ORC_MERCENARY, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("TARPIN_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case SAFE_VAULT:
                {
                    final boolean safe50 = instance.getParameters().getBoolean("SAFE_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !safe50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WARNING_WARNING_DANGER);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("SAFE_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(VAULT_GROUP).getSkill());
                    }
                    break;
                }
                case SECRET_VAULT:
                {
                    final boolean secret50 = instance.getParameters().getBoolean("SECRET_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !secret50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.WARNING_WARNING_DANGER);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("SECRET_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(VAULT_GROUP).getSkill());
                    }
                    break;
                }
                case SAKUM:
                {
                    final boolean sakum50 = instance.getParameters().getBoolean("SAKUM_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !sakum50)
                    {
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(POSLOF, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("SAKUM_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case CRAZY_TYPHOON:
                {
                    final boolean typhoon50 = instance.getParameters().getBoolean("TYPHOON_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !typhoon50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.HAHAHA_UNLEASH_THE_DOGS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(POSLOF, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("TYPHOON_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case CURSED_HAREN:
                {
                    final boolean haren50 = instance.getParameters().getBoolean("HAREN_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !haren50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.IT_S_PAINFUL_MY_BODY_IS_MOVING_AGAINST_MY_WILL_AARGHH);
                        npc.abortCast();
                        npc.doCast(EMBRYO_GUARDIAN.getSkill());
                        instance.getParameters().set("HAREN_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case FLYNT:
                {
                    final boolean flynt50 = instance.getParameters().getBoolean("FLYNT_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !flynt50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ARGHH_2);
                        npc.abortCast();
                        npc.doCast(EMBRYO_BERSERKER.getSkill());
                        instance.getParameters().set("FLYNT_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case HARP:
                {
                    final boolean harp50 = instance.getParameters().getBoolean("HARP_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !harp50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DANGEROUS_ENEMY_DEACTIVATING_LIMITERS);
                        npc.abortCast();
                        npc.doCast(EMBRYO_BERSERKER.getSkill());
                        instance.getParameters().set("HARP_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case MALISS:
                {
                    final boolean maliss50 = instance.getParameters().getBoolean("MALISS_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !maliss50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.ISADORA_HELP);
                        npc.abortCast();
                        npc.doCast(EMBRYO_GUARDIAN.getSkill());
                        instance.getParameters().set("MALISS_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case ISADORA:
                {
                    final boolean isadora50 = instance.getParameters().getBoolean("ISADORA_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !isadora50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.YOU_WILL_PAY_FOR_THIS_INSULT);
                        npc.abortCast();
                        npc.doCast(EMBRYO_BERSERKER.getSkill());
                        instance.getParameters().set("ISADORA_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(FIGHTER_GROUP).getSkill());
                    }
                    break;
                }
                case WHITRA:
                {
                    final boolean whitra50 = instance.getParameters().getBoolean("WITHRA_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !whitra50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GUARD_MESSIAH_CASTLE);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_WIZARD, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("WITHRA_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case BLETRA:
                {
                    final boolean bletra50 = instance.getParameters().getBoolean("BLETRA_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !bletra50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.GUARD_MESSIAH_CASTLE);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_WIZARD, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("BLETRA_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case UPGRADED_SIEGE_TANK:
                {
                    final boolean tank50 = instance.getParameters().getBoolean("TANK_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !tank50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.DANGER_SUMMON_RAIDERS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_RAIDER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("TANK_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case VEGIMA:
                {
                    final boolean vegima50 = instance.getParameters().getBoolean("VEGIMA_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !vegima50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.LORD_ETIS_VAN_ETINA_GRANT_US_UNHOLY_POWER);
                        npc.abortCast();
                        npc.doCast(EMBRYO_GUARDIAN.getSkill());
                        instance.getParameters().set("VEGIMA_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case VARONIA:
                {
                    final boolean varonia50 = instance.getParameters().getBoolean("VARONIA_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !varonia50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RISE_MY_SLAVES);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(RESURRECTED_CASTLE_ARCHER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("VARONIA_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case ARONIA:
                {
                    final boolean varonia50 = instance.getParameters().getBoolean("VARONIA_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !varonia50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.RISE_MY_SLAVES);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(RESURRECTED_CASTLE_ARCHER, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("VARONIA_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case ODD:
                {
                    final boolean odd50 = instance.getParameters().getBoolean("ODD_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !odd50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.PUNISH_THE_HEATHENS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_WIZARD, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("ODD_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case EVEN:
                {
                    final boolean even50 = instance.getParameters().getBoolean("EVEN_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !even50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.PUNISH_THE_HEATHENS);
                        for (int i = 0; i < 8; i++)
                        {
                            addSpawn(CASTLE_WIZARD, npc.getLocation(), true, 0, false, instance.getId());
                        }
                        instance.getParameters().set("EVEN_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
                case NEMERTESS:
                {
                    final boolean nemertess50 = instance.getParameters().getBoolean("NEMERTESS_50", false);
                    if ((npc.getCurrentHp() <= (npc.getMaxHp() * 0.5)) && !nemertess50)
                    {
                        npc.broadcastSay(ChatType.NPC_GENERAL, NpcStringId.IT_S_TIME_TO_PAY_BACK_FOR_WHAT_HAPPENED_IN_THE_LABYRINTH_OF_BELIS);
                        npc.abortCast();
                        npc.doCast(EMBRYO_BERSERKER.getSkill());
                        instance.getParameters().set("NEMERTESS_50", true);
                    }
                    else
                    {
                        npc.setTarget(mostHated);
                        npc.doCast(getRandomEntry(MAGE_GROUP).getSkill());
                    }
                    break;
                }
            }
        }
        return super.onAttack(npc, attacker, damage, isSummon, skill);
    }
    
    @Override
    public String onKill(Npc npc, Player killer, boolean isSummon)
    {
        final Instance instance = npc.getInstanceWorld();
        if (isInInstance(instance))
        {
            switch (npc.getId())
            {
                case SIEGE_TANK:
                case MAGIC_CANNON:
                {
                    if (!bossSet.isEmpty())
                    {
                        List<Integer> bossList = new ArrayList<>(bossSet);
                        Random random = new Random();
                        int randomIndex = random.nextInt(bossList.size());
                        
                        Integer randomBoss = bossList.get(randomIndex);
                        bossSet.remove(randomBoss);
                        
                        addSpawn(randomBoss, npc.getLocation(), true, 0, false, instance.getId());
                    }
                    break;
                }
            }
            if (ArrayUtil.contains(BOSSES, npc.getId()))
            {
                final int zoneId = killer.getVariables().getInt("CURRENT_ZONE", 0);
                switch (zoneId)
                {
                    case DEVIANNE_1:
                    {
                        DEVIANNE_SAYUNE_1.setEnabled(true);
                        instance.spawnGroup("DEVIANNE_1_SAYUNE");
                        break;
                    }
                    case DEVIANNE_2:
                    {
                        DEVIANNE_SAYUNE_2.setEnabled(true);
                        instance.spawnGroup("DEVIANNE_2_SAYUNE");
                        break;
                    }
                    case DEVIANNE_3:
                    {
                        DEVIANNE_SAYUNE_3.setEnabled(true);
                        instance.spawnGroup("DEVIANNE_3_SAYUNE");
                        break;
                    }
                    case ELIKIA_1:
                    {
                        ELIKIA_SAYUNE_1.setEnabled(true);
                        instance.spawnGroup("ELIKIA_1_SAYUNE");
                        break;
                    }
                    case ELIKIA_2:
                    {
                        ELIKIA_SAYUNE_2.setEnabled(true);
                        instance.spawnGroup("ELIKIA_2_SAYUNE");
                        break;
                    }
                    case ELIKIA_3:
                    {
                        ELIKIA_SAYUNE_3.setEnabled(true);
                        instance.spawnGroup("ELIKIA_3_SAYUNE");
                        break;
                    }
                    case SPORCHA_1:
                    {
                        SPORCHA_SAYUNE_1.setEnabled(true);
                        instance.spawnGroup("SPORCHA_1_SAYUNE");
                        break;
                    }
                    case SPORCHA_2:
                    {
                        SPORCHA_SAYUNE_2.setEnabled(true);
                        instance.spawnGroup("SPORCHA_2_SAYUNE");
                        break;
                    }
                    case SPORCHA_3:
                    {
                        SPORCHA_SAYUNE_3.setEnabled(true);
                        instance.spawnGroup("SPORCHA_3_SAYUNE");
                        break;
                    }
                    case LEONA_1:
                    {
                        LEONA_SAYUNE_1.setEnabled(true);
                        instance.spawnGroup("LEONA_1_SAYUNE");
                        break;
                    }
                    case LEONA_2:
                    {
                        LEONA_SAYUNE_2.setEnabled(true);
                        instance.spawnGroup("LEONA_2_SAYUNE");
                        break;
                    }
                    case LEONA_3:
                    {
                        LEONA_SAYUNE_3.setEnabled(true);
                        instance.spawnGroup("LEONA_3_SAYUNE");
                        break;
                    }
                }
                
                showOnScreenMsg(instance, NpcStringId.THE_SAYUNE_TO_THE_NEXT_AREA_HAS_BEEN_ACTIVATED, ExShowScreenMessage.TOP_CENTER, 7000, false);
                instance.getAliveNpcs(MINIONS).forEach(minion -> minion.deleteMe());
                
                int aliveRaid = instance.getParameters().getInt("ALIVE_RAIDS", 11);
                instance.setParameter("ALIVE_RAIDS", aliveRaid - 1);
                
                if (aliveRaid == 0)
                {
                    playMovie(instance, Movie.SI_INZONE_FIN);
                    instance.getAliveNpcs(MONSTERS).forEach(monster -> monster.deleteMe());
                    instance.finishInstance();
                }
            }
        }
        return super.onKill(npc, killer, isSummon);
    }
    
    @Override
    public String onFirstTalk(Npc npc, Player player)
    {
        final Instance instance = npc.getInstanceWorld();
        final String htmltext = null;
        if (isInInstance(instance))
        {
            return npc.getId() + ".html";
        }
        return htmltext;
    }
    
    @Override
    public String onEnterZone(Creature creature, ZoneType zone)
    {
        final Instance instance = creature.getInstanceWorld();
        if ((instance != null) && creature.isPlayer())
        {
            creature.asPlayer().getVariables().set("CURRENT_ZONE", zone.getId());
        }
        return super.onEnterZone(creature, zone);
    }
    
    public static void main(String[] args)
    {
        new MessiahOuter();
    }
}
 
uter81, блин чувак, тут за последний год 50% тем это твои вопросы по сборке, тебе что религия не позволяет закинуть скрипт в жпт и спросить там это? 1 минута дела. Ну жесть же какая то.

Или пройтись глазами по коду и поискать if (player.isInCommandChannel())
 
uter81, блин чувак, тут за последний год 50% тем это твои вопросы по сборке, тебе что религия не позволяет закинуть скрипт в жпт и спросить там это? 1 минута дела. Ну жесть же какая то.

Или пройтись глазами по коду и поискать if (player.isInCommandChannel())
Ты радоваться должен, что неофиты сюда приходят, а не в жопете) Вон Stackoverflow уже даже потихоньку сдыхает. Люди вообще перестают вопросы задавать.
1768453909210.webp
 
Ты радоваться должен, что неофиты сюда приходят, а не в жопете) Вон Stackoverflow уже даже потихоньку сдыхает даже. Люди вообще перестают вопросы задавать.
Посмотреть вложение 92918
Не, я не спорю что форум нужен для этого, в целом и создан для этого, что это живое общение и тд. Но такой простой вопрос можно было бы и самому решить, он дольше ответа будет ждать.
 
Не, я не спорю что форум нужен для этого, в целом и создан для этого, что это живое общение и тд. Но такой простой вопрос можно было бы и самому решить, он дольше ответа будет ждать.
Ну он для тебя простой. А твои вопросы для меня простые. А мои вопросы для еще кого-то простые. Это же не повод народ сливать?)
 
uter81, блин чувак, тут за последний год 50% тем это твои вопросы по сборке, тебе что религия не позволяет закинуть скрипт в жпт и спросить там это? 1 минута дела. Ну жесть же какая то.

Или пройтись глазами по коду и поискать if (player.isInCommandChannel())
я пробовал убирать и этот параметр, и сравнивать с другим подобным инстом на примере алтаря шилен, заменял часть кода, там сразу куча ош

uter81, блин чувак, тут за последний год 50% тем это твои вопросы по сборке, тебе что религия не позволяет закинуть скрипт в жпт и спросить там это? 1 минута дела. Ну жесть же какая то.

Или пройтись глазами по коду и поискать if (player.isInCommandChannel())
GPT там тоже по нормальному не делает я и там пробовал
 
Там помимо player.isInCommandChannel() нужно еще поменять player.getCommandChannel().getMembers().
Можешь заменить КК на просто Пати
 
я пробовал убирать и этот параметр, и сравнивать с другим подобным инстом на примере алтаря шилен, заменял часть кода, там сразу куча ош
Замени эти две строки

if (player.isInCommandChannel()) ----- > if (player.isInParty())
final List<Player> members = player.getCommandChannel().getMembers(); ---> final List<Player> members = player.getParty().getMembers();
 
Ну не знаю, тебя вот это на мысль не наводит как убрать проверку на командный канал?
if (player.isInCommandChannel())
Возьми за пример вход в инст чисто пати, и переделай public String onEvent(String event, Npc npc, Player player)
 
вечером попробую ребят, и отпишусь по результатам
 
я пробовал убирать и этот параметр, и сравнивать с другим подобным инстом на примере алтаря шилен, заменял часть кода, там сразу куча ош


GPT там тоже по нормальному не делает я и там пробовал
Я не знаю как вы пользуетесь ИИ, но буквально 5 секунд с вашим же текстом и кодом. ИИ написал ответ.
Для того чтобы изменить условия входа с Командного Канала (21+ человек) на обычную группу из 7 игроков, вам нужно внести изменения в константу COND_MEMBERS и переписать логику проверки в методе onEvent.

Ниже приведен измененный участок кода.

1. Изменение константы​

Найдите строку с COND_MEMBERS (примерно 156-я строка) и замените значение на 7:
Код:
private static final int COND_MEMBERS = 7; // Было 21

2. Изменение логики входа в onEvent​

Замените блок case "enterInstance": на следующий код. Теперь он проверяет наличие группы вместо командного канала
Код:
case "enterInstance":
            {
                if (player.isInParty())
                {
                    final List<Player> members = player.getParty().getMembers();
                    if (members.size() >= COND_MEMBERS)
                    {
                        // Сначала проверяем всех участников на соответствие условиям
                        for (Player member : members)
                        {
                            if (member.getLevel() < COND_LEVEL)
                            {
                                return "condNoLevel.html";
                            }
                            if (!member.isInsideRadius3D(npc, 1000))
                            {
                                player.sendMessage("Player " + member.getName() + " must come closer.");
                                return null;
                            }
                        }
                        
                        // Если все прошли проверку — впускаем
                        for (Player member : members)
                        {
                            enterInstance(member, npc, TEMPLATE_ID);
                        }
                    }
                    else
                    {
                        // Можно заменить на другое сообщение, если есть в HTML
                        htmltext = "condNoCommandChannel.html";
                        return htmltext;
                    }
                }
                else if (player.isGM())
                {
                    enterInstance(player, npc, TEMPLATE_ID);
                }
                else
                {
                    htmltext = "condNoCommandChannel.html";
                    return htmltext;
                }
                break;
            }

Что именно изменилось:​

  • player.isInParty(): Теперь код проверяет, находится ли игрок в обычной группе.
  • player.getParty().getMembers(): Список игроков берется из группы, а не из СС.
  • Логика проверки: Я добавил предварительную проверку всех членов группы перед входом. В оригинальном коде была проблема: если первый игрок подходил по уровню, а второй нет, первый всё равно успевал зайти в инстанс. Теперь либо заходят все, либо никто.
[!NOTE]Поскольку вы уже убрали проверку в XML, убедитесь, что в файле 265.xml (или какой ID у вашего шаблона) параметры minPlayers и maxPlayers также соответствуют вашим пожеланиям (например, minPlayers="1" и maxPlayers="7").
Что Вы будете делать когда запустите проект и будут такие простые задачи? Писать на форум и ждать ответы? Научитесь самое просто решать, тут не надо быть гением, или еще что.
 

Похожие темы

Ответы
8
Просмотры
2К
Назад
Сверху Снизу