texport 0 Опубликовано 25 января, 2014 Появилась необходимость вывести в конфиг количество персонажей для входа к Тарасу и других Боссов. Но при попытке найти, нашёл только проверку на СС. Исходники Firts-Team, м.б. кто подскажет куда копать? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
SmokiMo 892 Опубликовано 25 января, 2014 Ищи НПС для входа, смотри там в ХТМЛи какой запрос идет, и ищи в скриптах этот запрос. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
texport 0 Опубликовано 25 января, 2014 !Heart of Warding: Доносится очень громкий голос, от которого дрожит все тело: <font color="LEVEL">Он был брошен с самого рождения.%% Его мать была обманута детьми.%% Он спустился на землю,%% Чтобы умерить ее гнев.Паломник Земли Тьмы!%% Как Вы смеете бросать вызов Антарасу?</font> (Бросить вызов Антарасу могут максимум 200 игроков.) [npc_%objectId%_enter_lair|Переместиться в Гнездо Антараса] вот что в HTML диалоге... Куда дальше следовать я не знаю... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Mifesto 42 Опубликовано 25 января, 2014 (изменено) ищеш по айди в xml НПЦ, смотриш какой у него тип, идеш в sripts/npc/model/NpcTypeInstance.java Изменено 25 января, 2014 пользователем Mifesto Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
texport 0 Опубликовано 25 января, 2014 <set name="type" value="HeartOfWarding" /> Это тип этого NPC в папке sripts/npc/model/NpcTypeInstance.java где NpcTypeInstance = HeartOfWardingUnstance следующий код package npc.model; import l2ft.gameserver.model.Player; import l2ft.gameserver.model.instances.NpcInstance; import l2ft.gameserver.templates.npc.NpcTemplate; import bosses.AntharasManager; /** * @author pchayka */ public final class HeartOfWardingInstance extends NpcInstance { public HeartOfWardingInstance(int objectId, NpcTemplate template) { super(objectId, template); } @Override public void onBypassFeedback(Player player, String command) { if(!canBypassCheck(player, this)) return; if(command.equalsIgnoreCase("enter_lair")) { AntharasManager.enterTheLair(player); return; } else super.onBypassFeedback(player, command); } } где ясно сказано что выполнять нужно if(command.equalsIgnoreCase("enter_lair")) { AntharasManager.enterTheLair(player); return; } идём дальше, в AntharasManager, а именно в enterTheLair(player) public static void enterTheLair(Player player) { if(player == null) return; // Телепортироваться могут только ЦЦ, не знаю нужно ли но оставлю. if(player.getParty() == null || !player.getParty().isInCommandChannel()) { player.sendPacket(Msg.YOU_CANNOT_ENTER_BECAUSE_YOU_ARE_NOT_IN_A_CURRENT_COMMAND_CHANNEL); return; } CommandChannel cc = player.getParty().getCommandChannel(); if(cc.getChannelLeader() != player) { player.sendPacket(Msg.ONLY_THE_ALLIANCE_CHANNEL_LEADER_CAN_ATTEMPT_ENTRY); return; } if(cc.getMemberCount() > 200) { player.sendMessage("The maximum of 200 players can invade the Antharas Nest"); return; } if(getPlayersInside().size() > 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.getInventory().getCountOf(PORTAL_STONE) < 1 || !p.isInRange(player, 500)) { player.sendMessage("Command Channel member " + p.getName() + " doesn't meet the requirements to enter the nest"); return; } for(Player p : cc) p.teleToLocation(TELEPORT_POSITION); _checkPlayer = ThreadPoolManager.getInstance().scheduleAtFixedDelay(new CheckPlayerIsInCommandChannel(), 1000, 1000); setAntharasSpawnTask(); } Но я не вижу там где показано требуемое количество игроков или СС каналов для входа. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
GorDeveloper 356 Опубликовано 25 января, 2014 Как это, в проверках же if(cc.getMemberCount() > 200) { player.sendMessage("The maximum of 200 players can invade the Antharas Nest"); return; } if(getPlayersInside().size() > 200) { player.sendMessage("The maximum of 200 players can invade the Antharas Nest"); return; } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
texport 0 Опубликовано 25 января, 2014 Как это, в проверках же if(cc.getMemberCount() > 200) { player.sendMessage("The maximum of 200 players can invade the Antharas Nest"); return; } if(getPlayersInside().size() > 200) { player.sendMessage("The maximum of 200 players can invade the Antharas Nest"); return; } Ну тут я понимаю что проверяется на максимальное количество персонажей где getMemberCount() больше 200 говорит что много игроков, а getPlayersInside().size() проверяет сколько игроков уже внутри. А проверки на минимальное количество игроков я не вижу. Попробовал добавить следующее for(Player p : cc) { if (cc.getMemberCount() >= 4) { p.teleToLocation(TELEPORT_POSITION); _checkPlayer = ThreadPoolManager.getInstance().scheduleAtFixedDelay(new CheckPlayerIsInCommandChannel(), 1000, 1000); setAntharasSpawnTask(); } Как думаете, так норм? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
Gaikotsu 620 Опубликовано 26 января, 2014 даже близко не норм. зачем тебе запускать задачи CheckPlayerIsInCommandChannel и setAntharasSpawnTask столько раз, сколько у тебя народу в кк? Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
texport 0 Опубликовано 27 января, 2014 (изменено) Задача CheckPlayerIsInCommandChannel запускается при входе на проверку, действительно ли персонаж в СС. А setAntharasSpawnTask спавнит Антараса. private static class CheckPlayerIsInCommandChannel extends RunnableImpl { private int _task = 0; private List<Player> _players = getPlayersInside(); @Override public void runImpl() { for(Player pc : _players) { // Если игрок не в группе и не в Командном Канале if(pc.getParty() == null || (pc.getParty() != null && pc.getParty().getCommandChannel() == null)) // То телепортируем в ближайший город pc.teleToClosestTown(); } } } public synchronized static void setAntharasSpawnTask() { if(_monsterSpawnTask == null) _monsterSpawnTask = ThreadPoolManager.getInstance().schedule(new AntharasSpawn(1), FWA_APPTIMEOFANTHARAS); //_entryLocked = true; } Изменено 27 января, 2014 пользователем texport Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты