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

Lineage II
Дискуссии на тему создания, настройки и обслуживания серверов Lineage 2. При поддержке: Премиум услуги по рекламе

Ответ
Опции темы
Непрочитано 19.06.2011, 15:45   #1
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) востановление после релогина из инстанса.

Всем привет и сразу к сабжу.
В моей сборке (l2dc (лыжа)). не реализовано восстановление из инстансзоны после релогина. После релогина, если ты был, допустим в каме, ты снова оказываешься в каме, но мобов нигде нету, тоесть ты в нормальном мире, но по координатам ты остался там где вышел.
Так вот я надумал сделать такую фишку. В instance/***.xml прописывать

Код:
	<returnteleport x="17380" y="277582" z="-9704"/>

c координатами возврата (для каждого инстанса свои)
покопался в исходниках - нашел

Код:
public class Instance
{
	private void parseInstance(Node n) throws Exception
	{
		L2Spawn spawnDat;
		L2NpcTemplate npcTemplate;
		String name = null;
		name = n.getAttributes().getNamedItem("name").getNodeValue();
		setName(name);
		
		Node a;
		Node first = n.getFirstChild();
		for (n = first; n != null; n = n.getNextSibling())
		{
			else if ("returnteleport".equalsIgnoreCase(n.getNodeName()))
			{
				int tpx = 0, tpy = 0, tpz = 0;
				
				tpx = Integer.parseInt(n.getAttributes().getNamedItem("x").getNodeValue());
				tpy = Integer.parseInt(n.getAttributes().getNamedItem("y").getNodeValue());
				tpz = Integer.parseInt(n.getAttributes().getNamedItem("z").getNodeValue());
				
				setReturnTeleport(tpx, tpy, tpz);
			}
                       }
          }
}

На сколько я понимаю этот код записывает переменные из ***.xml в переменные java.
Так вот, очень буду признателен, если вы мне поможете и подскажите
как это реализовать на моем серве
Своими словами: При релогине(должен быть такой файл .java который обрабатывает события при релогине, на подобии EnterWorld.) идет проверка на то, состоит ли персонаж в каком-нибудь инстансе или нет, если да, то телепортирует его по координатам взятым из ***.xml

PS. "Спасибо" жать умею xD
krisadr вне форума Ответить с цитированием
Непрочитано 19.06.2011, 15:53   #2
Аватар для [STIGMATED]
Супергерой

По умолчанию Re: востановление после релогина из инстанса.

Посмотри на примере феникса, там есть такое.
__________________
Web программист\разработчик

— Есть только один способ проделать большую работу — полюбить ее. Если вы к этому не пришли, подождите. Не беритесь за дело.
[STIGMATED] вне форума Отправить сообщение для [STIGMATED] с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 19.06.2011, 15:56   #3
Live free or die!

По умолчанию Re: востановление после релогина из инстанса.

Цитата:
Сообщение от krisadr Посмотреть сообщение

Своими словами: При релогине(должен быть такой файл .java который обрабатывает события при релогине, на подобии EnterWorld.) идет проверка на то, состоит ли персонаж в каком-нибудь инстансе или нет, если да, то телепортирует его по координатам взятым из ***.xml
Самый простой способ: в EnterWorld внести проверку на открытый инстанс, т.е. если время инстанса больше 0, то телепортировать чара по координатам, указанным в xml.
Dеmon вне форума Ответить с цитированием
Сказали спасибо:
Непрочитано 19.06.2011, 16:53   #4
Аватар для ANZO
Разработчик BDO Emu

По умолчанию Re: востановление после релогина из инстанса.

Я обычно использую для этого getPlayerWorld, зачем изобретать костыли.

Код:
if (inst == 1)//Первый инстанс Гильдии Зинии
        {
            InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
            if (world != null && world.templateId == 140)
            {
                player.teleToLocation(-23749, -8959, -5384);
                player.setInstanceId(world.instanceId);
                return;
            }
            world = new JiniaWorld();
            world.instanceId = InstanceManager.getInstance().createDynamicInstance(null);
            world.templateId = 140;
            final Instance instance = InstanceManager.getInstance().getInstance(world.instanceId);
            final int time = 3600000;
            instance.setDuration(time);
            instance.setEmptyDestroyTime(10);
            final int[] returnLoc = {113832, -109263, -847};
            instance.setSpawnLoc(returnLoc);
            InstanceManager.getInstance().addWorld(world);
            instance.setName("Jinia Guild Hideout");
            addSpawn(jinia, -24040, -8969, -5360, 0, false, 0, false, world.instanceId);
            addSpawn(Legionnaire, -23993, -9069, -5384, 0, false, 0, false, world.instanceId);
            addSpawn(BattalionLeader, -23993, -8845, -5384, 0, false, 0, false, world.instanceId);
            player.teleToLocation(-23749, -8959, -5384);
            player.setInstanceId(world.instanceId);
        }
ANZO вне форума Отправить сообщение для ANZO с помощью ICQ Отправить сообщение для ANZO с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 19.06.2011, 19:34   #5
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Re: востановление после релогина из инстанса.

в LogOut.java добавил:
Код:
protected void runImpl()
	{
		InstanceWorld world = InstanceManager.getInstance().getPlayerWorld(player);
		if(world != null){
			_log.info("Player relogging in instancezone and teleporting in town.");
			final Instance instance = _instancesMap.get(world.instanceId);
			instance.teleportFromInstanceAfterReLogin(player);
			return;
		}
в Instance.java:
Код:
	public void teleportFromInstanceAfterReLogin(L2PcInstance player)
	{
		player.teleToLocation(111409, 219364, -3545);
	}
в итоге при попытки выйти из игры НЕЗАВИСИМО от того создан ли для персонажа инстанс или нет. ничего не происходит, а в логах серва вижу следующее..


PS. ссылку на Instance зделал для того, что там хранятся переменные из ***.xml и потом бы я их вставил в координаты телепорта, но т.к полезли ошибки я решил просто поставить цифры player.teleToLocation(111409, 219364, -3545); здесь и проверить вообще ссылается ли туда либо ошибку выдает, оказывается второе. Вопрос - как исправить?
PSS Там где выдает ошибку - выделил красным.
krisadr вне форума Ответить с цитированием
Непрочитано 19.06.2011, 19:38   #6
Аватар для Azagthtot
Эксперт

По умолчанию Re: востановление после релогина из инстанса.

Код:
final Instance instance = _instancesMap.get(world.instanceId);
if(instance!=null)
    instance.teleportFromInstanceAfterReLogin(player);
Azagthtot вне форума Отправить сообщение для Azagthtot с помощью ICQ Отправить сообщение для Azagthtot с помощью Skype™ Ответить с цитированием
Сказали спасибо:
Непрочитано 19.06.2011, 20:28   #7
Изгнанные

По умолчанию Re: востановление после релогина из инстанса.

изобретатели велосипеда

в лыже все давно реализовано в EnterWorld
Код:
int instanceId = InstanceManager.getInstance().getPlayerInstance(activeChar.getObjectId());
if (instanceId > 0)
	InstanceManager.getInstance().getInstance(instanceId).removePlayer(activeChar.getObjectId());
скачай последние исходники и возьми код...

в твоем случае подход не очень неверный, так как тебе прийдется тыкать проверку в Logout, RequestRestart и L2GameClient(крит клиента, дисконект)
linliss1 вне форума Отправить сообщение для linliss1 с помощью ICQ Ответить с цитированием
Сказали спасибо:
Непрочитано 19.06.2011, 21:48   #8
Аватар для krisadr
Пользователь

Автор темы (Топик Стартер) Re: востановление после релогина из инстанса.

конечно это не то что я имел ввиду, но тоже неплохо. Да и к стати эта функция на серве уже была - просто как то упустил.
krisadr вне форума Ответить с цитированием
Ответ

Метки
instance, logout, изобретаем велосипед, релогин


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Пропалает баф после релога Deron Lineage II 5 18.05.2011 09:50
Ошибка после твт derron116 Lineage II 2 14.01.2011 19:14
Спаун НПС после РБ _{Simax}_ Lineage II 9 11.10.2010 10:49
Moy Web,надпись после ньюсов Jay Движки сайтов (CMS) 7 11.12.2008 18:35
бафф после смерти ATOM Lineage II 6 13.07.2008 15:06


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

Вверх