Мануал AntharasManager.java FIX с проблемой CC входа к Антарасу (SOLO Antaras + Valakas)

Url

zombieminer

Прохожий
Путник
16 Июн 2020
27
6
8
31
Украина, Запорожье
Понятия не имею пригодится ли это кому-то, но штука геморройная как для тех кто не знает JAVA.

Цель - Соло + Пати + СС одобренный вход к Антарасу и Валакасу Т.к на многих зборках где нет конфига входа соло приходится править руками.

Пример будет на L2s сборке. (какая зборка пофик)

1. Суть состоит в том что менеджер телепорта пропускает только лидера Канала Команды, а СОЛО и ПАТИ скидывает.
2. Ищем файл отвечающий за пропуск к Валакасу и Антарасу это AntharasManager.java и ValakasManager.java (\gameserver\data\scripts\bosses\AntharasManager.java)
3. В файле находим требования к Командному каналу:
Java:
public static void enterTheLair(Player ccleader)

    {

        if(ccleader == null)

            return;


        if(ccleader.getParty() == null || !ccleader.getParty().isInCommandChannel())

        {

            ccleader.sendPacket(SystemMsg.YOU_CANNOT_ENTER_BECAUSE_YOU_ARE_NOT_ASSOCIATED_WITH_THE_CURRENT_COMMAND_CHANNEL);

            return;

        }

        CommandChannel cc = ccleader.getParty().getCommandChannel();

        if(cc.getChannelLeader() != ccleader)

        {

            return;

        }

        if(cc.getMemberCount() > 200)

        {

            ccleader.sendMessage("The maximum of 200 players can invade the Antharas Nest");

            return;

        }

        if(_state.getState() != EpicBossState.State.NOTSPAWN)

        {

            ccleader.sendMessage("Antharas is still reborning. You cannot invade the nest now");

            return;

        }

        if(/*_entryLocked || */_state.getState() == EpicBossState.State.ALIVE) //По хорошему - до начала мувика должно пускать. А в начале мувика - он будится.

        {

            ccleader.sendMessage("Antharas has already been reborned and is being attacked. The entrance is sealed.");

            return;

        }

        // checking every member of CC for the proper conditions


        for(Player p : cc)

        {

            if(p.isDead() || p.isFlying() || p.isCursedWeaponEquipped() || !p.isInRange(ccleader, 500))

            {

                ccleader.sendMessage("Command Channel member " + p.getName() + " doesn't meet the requirements to enter the nest");

                return;

            }


            for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)

            {

                int itemId = item.length > 0 ? item[0] : 0;

                int itemCount = item.length > 1 ? item[1] : 0;

                if(itemId > 0 && itemCount > 0 && !ItemFunctions.haveItem(p, itemId, itemCount))

                {

                    ccleader.sendMessage("Command Channel member " + p.getName() + " doesn't meet the requirements to enter the nest");

                    return;

                }

            }

        }


        for(Player p : cc)

        {

            p.teleToLocation(TELEPORT_POSITION);


            if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)

            {

                for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)

                {

                    int itemId = item.length > 0 ? item[0] : 0;

                    int itemCount = item.length > 1 ? item[1] : 0;

                    if(itemId > 0 && itemCount > 0)

                        ItemFunctions.deleteItem(p, itemId, itemCount, true);

                }

            }

        }


        setAntharasSpawnTask();

    }


    public static int getTypeAntharas()

    {

        if(!BossesConfig.ANTHARAS_STRONG_ONLY)

        {

            int typeA = 1;

            if(getPlayersInside().size() <= FWA_LIMITOFWEAK)

                typeA = 0;

            else if(getPlayersInside().size() >= FWA_LIMITOFNORMAL)

                typeA = 2;

        }

        return 2;

    }

    @Override

    public void onLoad()

    {

        init();

    }


    @Override

    public void onReload()

    {

        sleep();

    }


    @Override

    public void onShutdown()

    {

    }

}


4. долго бившись с попытками удалить все требовония и переписать их нашол решение просто добавить еще немного требований из чего вышло не 1 проверка на канал каманды а 3 (СОЛО+ПАТИ+СС)

5. А именно необходимо добавить:
Java:
public static void enterTheLair(Player player)
    {
        if(player != null)
        {
            if(player.getParty() != null)
            {
                for(Player p : player.getParty().getPartyMembers())
                {
                    p.teleToLocation(TELEPORT_POSITION);

                    if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
                    {
                        for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                        {
                            int itemId = item.length > 0 ? item[0] : 0;
                            int itemCount = item.length > 1 ? item[1] : 0;
                            if(itemId > 0 && itemCount > 0)
                                ItemFunctions.deleteItem(p, itemId, itemCount, true);
                        }
                    }
                }
            }
            else
                player.teleToLocation(TELEPORT_POSITION);

            if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
            {
                for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                {
                    int itemId = item.length > 0 ? item[0] : 0;
                    int itemCount = item.length > 1 ? item[1] : 0;
                    if(itemId > 0 && itemCount > 0)
                        ItemFunctions.deleteItem(player, itemId, itemCount, true);
                }
            }

            setAntharasSpawnTask();
        }

6. Поздравляю победа останется только подпилить все ссылки ccleader заменить на player (так как мы проверять будет на лидера как раньше а player)
7. валик делается аналогично...

Java:
    public static void enterTheLair(Player player)
    {
        if(player != null)
        {
            if(player.getParty() != null)
            {
                for(Player p : player.getParty().getPartyMembers())
                {
                    p.teleToLocation(TELEPORT_POSITION);

                    if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
                    {
                        for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                        {
                            int itemId = item.length > 0 ? item[0] : 0;
                            int itemCount = item.length > 1 ? item[1] : 0;
                            if(itemId > 0 && itemCount > 0)
                                ItemFunctions.deleteItem(p, itemId, itemCount, true);
                        }
                    }
                }
            }
            else
                player.teleToLocation(TELEPORT_POSITION);

            if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
            {
                for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                {
                    int itemId = item.length > 0 ? item[0] : 0;
                    int itemCount = item.length > 1 ? item[1] : 0;
                    if(itemId > 0 && itemCount > 0)
                        ItemFunctions.deleteItem(player, itemId, itemCount, true);
                }
            }

            setAntharasSpawnTask();
        }

        if(player.getParty() == null || !player.getParty().isInCommandChannel())
        {
            player.sendPacket(SystemMsg.YOU_CANNOT_ENTER_BECAUSE_YOU_ARE_NOT_ASSOCIATED_WITH_THE_CURRENT_COMMAND_CHANNEL);
            return;
        }
        CommandChannel cc = player.getParty().getCommandChannel();
        if(cc.getChannelLeader() != player)
        {
            return;
        }
        if(cc.getMemberCount() > 200)
        {
            player.sendMessage("The maximum of 200 players can invade the Antharas Nest");
            return;
        }
        if(_state.getState() != EpicBossState.State.NOTSPAWN)
        {
            player.sendMessage("Antharas is still reborning. You cannot invade the nest now");
            return;
        }
        if(/*_entryLocked || */_state.getState() == EpicBossState.State.ALIVE) //По хорошему - до начала мувика должно пускать. А в начале мувика - он будится.
        {
            player.sendMessage("Antharas has already been reborned and is being attacked. The entrance is sealed.");
            return;
        }
        // checking every member of CC for the proper conditions

        for(Player p : cc)
        {
            if(p.isDead() || p.isFlying() || p.isCursedWeaponEquipped() || !p.isInRange(p, 500))
            {
                p.sendMessage("Command Channel member " + p.getName() + " doesn't meet the requirements to enter the nest");
                return;
            }

            for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
            {
                int itemId = item.length > 0 ? item[0] : 0;
                int itemCount = item.length > 1 ? item[1] : 0;
                if(itemId > 0 && itemCount > 0 && !ItemFunctions.haveItem(p, itemId, itemCount))
                {
                    p.sendMessage("Command Channel member " + p.getName() + " doesn't meet the requirements to enter the nest");
                    return;
                }
            }
        }

        for(Player p : cc)
        {
            p.teleToLocation(TELEPORT_POSITION);

            if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
            {
                for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                {
                    int itemId = item.length > 0 ? item[0] : 0;
                    int itemCount = item.length > 1 ? item[1] : 0;
                    if(itemId > 0 && itemCount > 0)
                        ItemFunctions.deleteItem(p, itemId, itemCount, true);
                }
            }
        }

        setAntharasSpawnTask();
    }

    public static int getTypeAntharas()
    {
        if(!BossesConfig.ANTHARAS_STRONG_ONLY)
        {
            int typeA = 1;
            if(getPlayersInside().size() <= FWA_LIMITOFWEAK)
                typeA = 0;
            else if(getPlayersInside().size() >= FWA_LIMITOFNORMAL)
                typeA = 2;
        }
        return 2;
    }
    @Override
    public void onLoad()
    {
        init();
    }

    @Override
    public void onReload()
    {
        sleep();
    }

    @Override
    public void onShutdown()
    {
    }
}

6a2edba033e24e790e9f5256b15e72d1-full.jpg
 
  • Мне нравится
Реакции: CrazyCort и PrizraKZN

zombieminer

Прохожий
Путник
16 Июн 2020
27
6
8
31
Украина, Запорожье
Внес небольшие поправки, поскольку вышеуказанная редакция ломает ядро и делает баг с постоянным спавном игнорируя статус убийства босса и его воскрешения. Внесены исправления.





Java:
    public static void enterTheLair(Player player)
    {
        if(player != null)
        {
            if(_state.getState() != EpicBossState.State.NOTSPAWN)
            {
                player.sendMessage("Antharas is still reborning. You cannot invade the nest now");
                return;
            }
            if(/*_entryLocked || */_state.getState() == EpicBossState.State.ALIVE) //По хорошему - до начала мувика должно пускать. А в начале мувика - он будится.
            {
                player.sendMessage("Antharas has already been reborned and is being attacked. The entrance is sealed.");
                return;
            }
            
            player.teleToLocation(TELEPORT_POSITION);
            setAntharasSpawnTask();
            
            if(player.getParty() != null)
            {
                if(_state.getState() != EpicBossState.State.NOTSPAWN)
                {
                    player.sendMessage("Antharas is still reborning. You cannot invade the nest now");
                    return;
                }
                if(/*_entryLocked || */_state.getState() == EpicBossState.State.ALIVE) //По хорошему - до начала мувика должно пускать. А в начале мувика - он будится.
                {
                    player.sendMessage("Antharas has already been reborned and is being attacked. The entrance is sealed.");
                    return;
                }
                for(Player p : player.getParty().getPartyMembers())
                {
                    if(_state.getState() != EpicBossState.State.NOTSPAWN)
                    {
                        player.sendMessage("Antharas is still reborning. You cannot invade the nest now");
                        return;
                    }
                    if(/*_entryLocked || */_state.getState() == EpicBossState.State.ALIVE) //По хорошему - до начала мувика должно пускать. А в начале мувика - он будится.
                    {
                        player.sendMessage("Antharas has already been reborned and is being attacked. The entrance is sealed.");
                        return;
                    }
                    
                    if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
                    {
                        for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                        {
                            int itemId = item.length > 0 ? item[0] : 0;
                            int itemCount = item.length > 1 ? item[1] : 0;
                            if(itemId > 0 && itemCount > 0)
                                ItemFunctions.deleteItem(p, itemId, itemCount, true);
                        }
                    }
                    p.teleToLocation(TELEPORT_POSITION);
                    setAntharasSpawnTask();
                }
            }

            if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
            {
                for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                {
                    int itemId = item.length > 0 ? item[0] : 0;
                    int itemCount = item.length > 1 ? item[1] : 0;
                    if(itemId > 0 && itemCount > 0)
                        ItemFunctions.deleteItem(player, itemId, itemCount, true);
                }
            }
            setAntharasSpawnTask();
        }

        if(player.getParty() == null || !player.getParty().isInCommandChannel())
        {
            player.sendPacket(SystemMsg.YOU_CANNOT_ENTER_BECAUSE_YOU_ARE_NOT_ASSOCIATED_WITH_THE_CURRENT_COMMAND_CHANNEL);
            return;
        }
        CommandChannel cc = player.getParty().getCommandChannel();
        if(cc.getChannelLeader() != player)
        {
            return;
        }
        if(cc.getMemberCount() > 200)
        {
            player.sendMessage("The maximum of 200 players can invade the Antharas Nest");
            return;
        }
        if(_state.getState() != EpicBossState.State.NOTSPAWN)
        {
            player.sendMessage("Antharas is still reborning. You cannot invade the nest now");
            return;
        }
        if(/*_entryLocked || */_state.getState() == EpicBossState.State.ALIVE) //По хорошему - до начала мувика должно пускать. А в начале мувика - он будится.
        {
            player.sendMessage("Antharas has already been reborned and is being attacked. The entrance is sealed.");
            return;
        }
        // checking every member of CC for the proper conditions

        for(Player p : cc)
        {
            if(p.isDead() || p.isFlying() || p.isCursedWeaponEquipped() || !p.isInRange(p, 500))
            {
                p.sendMessage("Command Channel member " + p.getName() + " doesn't meet the requirements to enter the nest");
                return;
            }

            for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
            {
                int itemId = item.length > 0 ? item[0] : 0;
                int itemCount = item.length > 1 ? item[1] : 0;
                if(itemId > 0 && itemCount > 0 && !ItemFunctions.haveItem(p, itemId, itemCount))
                {
                    p.sendMessage("Command Channel member " + p.getName() + " doesn't meet the requirements to enter the nest");
                    return;
                }
            }
        }

        for(Player p : cc)
        {
            p.teleToLocation(TELEPORT_POSITION);

            if(BossesConfig.ANTHARAS_ENTERANCE_CAN_CONSUME_NECESSARY_ITEMS)
            {
                for(int[] item : BossesConfig.ANTHARAS_ENTERANCE_NECESSARY_ITEMS)
                {
                    int itemId = item.length > 0 ? item[0] : 0;
                    int itemCount = item.length > 1 ? item[1] : 0;
                    if(itemId > 0 && itemCount > 0)
                        ItemFunctions.deleteItem(p, itemId, itemCount, true);
                }
            }
        }

        setAntharasSpawnTask();
    }