01-27-2014, 06:26 AM
Здравствуйте, появилась необходимость вывести минимальное количество игроков для входа к Антарасу. Исходники команды First-Team.
Сначала по ID телепорта к Тарасу нашёл его диалог в HTML:
Затем пошёл посмотреть тип NPC и найти его в xml файле, тип был такой:
Далее я проследовал до sripts/npc/model/NpcTypeInstance.java где NpcTypeInstance = HeartOfWardingUnstance
Где ясно сказано что нужно выполнять:
идём дальше, в AntharasManager, а именно в enterTheLair(player)
Есть только проверка на максимальное количество игроков при входе и внутри. Подскажите пожалуйста куда рыть дальше?
Сначала по ID телепорта к Тарасу нашёл его диалог в HTML:
!Heart of Warding:
Доносится очень громкий голос, от которого дрожит все тело:
<font color="LEVEL">Он был брошен с самого рождения.%%
Его мать была обманута детьми.%%
Он спустился на землю,%%
Чтобы умерить ее гнев.Паломник Земли Тьмы!%%
Как Вы смеете бросать вызов Антарасу?</font>
(Бросить вызов Антарасу могут максимум 200 игроков.)
[npc_%objectId%_enter_lair|Переместиться в Гнездо Антараса]
Затем пошёл посмотреть тип NPC и найти его в xml файле, тип был такой:
<set name="type" value="HeartOfWarding" />
Далее я проследовал до 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();
}
Есть только проверка на максимальное количество игроков при входе и внутри. Подскажите пожалуйста куда рыть дальше?