Вывод минимального количества игроков в конфиг для прохода к Antharas - Форум администраторов игровых серверов
Форум администраторов игровых серверов StormWall - Защита от DDos атак
Регистрация Мнения Справка Сообщество Календарь
Вернуться   Форум администраторов игровых серверов > MMO > Lineage II > Работа со скриптами

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.

Ответ
Опции темы
Непрочитано 27.01.2014, 06:26   #1
Пользователь

Автор темы (Топик Стартер) Вывод минимального количества игроков в конфиг для прохода к Antharas

Здравствуйте, появилась необходимость вывести минимальное количество игроков для входа к Антарасу. Исходники команды First-Team.

Сначала по ID телепорта к Тарасу нашёл его диалог в HTML:
Код HTML:
!Heart of Warding:
Доносится очень громкий голос, от которого дрожит все тело:
<font color="LEVEL">Он был брошен с самого рождения.%%
Его мать была обманута детьми.%%
Он спустился на землю,%%
Чтобы умерить ее гнев.Паломник Земли Тьмы!%%
Как Вы смеете бросать вызов Антарасу?</font>
(Бросить вызов Антарасу могут максимум 200 игроков.)
[npc_%objectId%_enter_lair|Переместиться в Гнездо Антараса]
Затем пошёл посмотреть тип NPC и найти его в xml файле, тип был такой:
Код HTML:
<set name="type" value="HeartOfWarding" />
Далее я проследовал до sripts/npc/model/NpcTypeInstance.java где NpcTypeInstance = HeartOfWardingUnstance
Код HTML:
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);
}
}
Где ясно сказано что нужно выполнять:
Код HTML:
if(command.equalsIgnoreCase("enter_lair"))
  {
   AntharasManager.enterTheLair(player);
   return;
  }
идём дальше, в AntharasManager, а именно в enterTheLair(player)
Код HTML:
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();
}
Есть только проверка на максимальное количество игроков при входе и внутри. Подскажите пожалуйста куда рыть дальше?
texport вне форума Отправить сообщение для texport с помощью Skype™ Ответить с цитированием
Непрочитано 27.01.2014, 06:32   #2
Аватар для pchayka
Какие бекапы? О_о

По умолчанию Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

Код:
if(cc.getMemberCount() < 100)
  {
   player.sendMessage("Чтобы войти нужно минимум 100 человек");
   return;
  }
Но это в любом случае не универсальная проверка.

Лучше всего не запускать Анатараса если меньше такого-то числа, но они могут выйти уже после.
pchayka вне форума Ответить с цитированием
Непрочитано 27.01.2014, 06:47   #3
Пользователь

Автор темы (Топик Стартер) Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

А если сделать вот так?

Код HTML:
for(Player p : cc) {
            if (cc.getMemberCount() >= 4) {
                p.teleToLocation(TELEPORT_POSITION);
                _checkPlayer = ThreadPoolManager.getInstance().scheduleAtFixedDelay(new CheckPlayerIsInCommandChannel(), 1000, 1000);
                setAntharasSpawnTask();
            }
        }
texport вне форума Отправить сообщение для texport с помощью Skype™ Ответить с цитированием
Непрочитано 27.01.2014, 06:53   #4
Аватар для pchayka
Какие бекапы? О_о

По умолчанию Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

Этот код нелогичен и не решает задачу
pchayka вне форума Ответить с цитированием
Непрочитано 27.01.2014, 08:31   #5
Пользователь

Автор темы (Топик Стартер) Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

Этот код спавнит Антараса?

Код HTML:
 public synchronized static void setAntharasSpawnTask()
    {
        if(_monsterSpawnTask == null)
            _monsterSpawnTask = ThreadPoolManager.getInstance().schedule(new AntharasSpawn(1), FWA_APPTIMEOFANTHARAS);
        //_entryLocked = true;
    }
texport вне форума Отправить сообщение для texport с помощью Skype™ Ответить с цитированием
Непрочитано 27.01.2014, 14:02   #6
Аватар для pchayka
Какие бекапы? О_о

По умолчанию Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

Да, вызывать его несколько раз нет смысла.

Минимальное количество игроков чтобы он начал спавниться можно сделать лиснером зоны. Но они смогут уйти, т.е. событие будет производиться один раз.
pchayka вне форума Ответить с цитированием
Непрочитано 27.01.2014, 14:18   #7
Пользователь

Автор темы (Топик Стартер) Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

А можете дать пример лиснера зоны? Я просто не совсем что значит это словосочетание)))
texport вне форума Отправить сообщение для texport с помощью Skype™ Ответить с цитированием
Непрочитано 27.01.2014, 14:30   #8
Аватар для pchayka
Какие бекапы? О_о

По умолчанию Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

Что значит, откуда стартовать?

Добавлено через 1 час 28 минут
Listener это модуль, который срабатывает когда происходит какое-то событие. Например в зону входит плеер. Это по идее должно быть в любой сборке и это же и используется. Но без знаний явы сложно будет. Только смотреть примеры.

Последний раз редактировалось pchayka; 27.01.2014 в 15:59. Причина: Добавлено сообщение
pchayka вне форума Ответить с цитированием
Непрочитано 28.01.2014, 13:03   #9
Пользователь

Автор темы (Топик Стартер) Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

Вот к примеру проверка на вход к фринте - @author pchayka, т.е. ваш скрипт, вот где указано минимальное количество для входа.

Это проверка на вход к фринте, тут да же нету проверки на СС.

Код HTML:
public void onBypassFeedback(Player player, String command)
	{
		if(!canBypassCheck(player, this))
			return;

		if(command.equalsIgnoreCase("request_frintezza"))
		{
			Reflection r = player.getActiveReflection();
			if(r != null)
			{
				if(player.canReenterInstance(frintezzaIzId))
					player.teleToLocation(r.getTeleportLoc(), r);
			}
			else if(player.canEnterInstance(frintezzaIzId))
			{
				if(ItemFunctions.removeItem(player, 8073, 1, true) < 1)
				{
					player.sendPacket(new SystemMessage(SystemMessage.C1S_ITEM_REQUIREMENT_IS_NOT_SUFFICIENT_AND_CANNOT_BE_ENTERED).addName(player));
					return;
				}
				ReflectionUtils.enterReflection(player, new Frintezza(), frintezzaIzId);
			}
		}
		else
			super.onBypassFeedback(player, command);
	}
Добавлено через 6 минут
По поводу листнеров т.е. слушателей.

Вот к примеру как вы говорили слушатель зоны

Код HTML:
private ZoneListener _zoneListener = new ZoneListener();
Вот всё что мне удалось найти

Код HTML:
public class ZoneListener implements OnZoneEnterLeaveListener
	{
		@Override
		public void onZoneEnter(Zone zone, Creature cha)
		{
		}

		@Override
		public void onZoneLeave(Zone zone, Creature cha)
		{
			if(cha.isNpc() && (cha.getNpcId() == _weakScarletId || cha.getNpcId() == _strongScarletId))
			{
				cha.teleToLocation(new Location(-87784, -153304, -9176));
				((NpcInstance) cha).getAggroList().clear(true);
				cha.setCurrentHpMp(cha.getMaxHp(), cha.getMaxMp());
				cha.broadcastCharInfo();
			}
		}
	}

Последний раз редактировалось texport; 28.01.2014 в 13:10. Причина: Добавлено сообщение
texport вне форума Отправить сообщение для texport с помощью Skype™ Ответить с цитированием
Непрочитано 28.01.2014, 14:15   #10
Аватар для pchayka
Какие бекапы? О_о

По умолчанию Re: Вывод минимального количества игроков в конфиг для прохода к Antharas

Цитата:
Сообщение от texport Посмотреть сообщение
Это проверка на вход к фринте, тут да же нету проверки на СС.
Я перерабатывал механизмы данжей в общий модуль. Проверки производятся в родительском коде исходя из данных xml по данжам. Фринта это данж, Антарас - нет.

Код:
@Override
		public void onZoneEnter(Zone zone, Creature cha)
		{
		}
Вот тут и должна быть обработка старта. Но сделать ее надо правильно.
pchayka вне форума Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ghost++ , GhostOne - Скачать - Установить - Настроить Array WarCraft III 928 19.05.2019 22:17
Изменить IpAdress C5 Oath Of Blood за денюжку Krasavella Рынок / Marketplace 21 20.02.2013 08:48
[Продам] Lineage2 Interlude от команды RusTeam TARAN Рынок / Marketplace 2 29.05.2010 17:17


© 2007–2024 «Форум администраторов игровых серверов»
Защита сайта от DDoS атак — StormWall
Работает на Булке неизвестной версии с переводом от zCarot
Текущее время: 11:42. Часовой пояс GMT +3.

Вверх