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

Работа со скриптами Помощь в редактировании и написании квестов к Java серверам, а так же эвентов.
Описание темы:При взятии 1 или 2рой профы у игрок подвисает.

Ответ
Опции темы
Непрочитано 03.01.2013, 01:55   #1
Пользователь

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

У меня на пвп сервере автоматическое изучение скилов.
Когда игрок у нпц берет первую или вторую профу - он подвисает на 10-20 секунд.
Также это создает небольшие лаги на сервере.

Есть ли способ сделать автоизучение или смену саба без лагов?

Код
Код:
public int giveAvailableSkills(boolean includedByFs, boolean includeAutoGet)
	{
		int unLearnable = 0;
		int skillCounter = 0;
		
		// Get available skills
		FastList<L2SkillLearn> skills = SkillTreesData.getInstance().getAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
		
		while (skills.size() > unLearnable)
		{
			for (L2SkillLearn s: skills)
			{
				L2Skill sk = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
				if (sk == null || (sk.getId() == L2Skill.SKILL_DIVINE_INSPIRATION && !Config.AUTO_LEARN_DIVINE_INSPIRATION && !isGM()))
				{
					unLearnable++;
					continue;
				}
				
				if (getSkillLevel(sk.getId()) == -1)
				{
					skillCounter++;
				}
				
				// fix when learning toggle skills
				if (sk.isToggle())
				{
					L2Effect toggleEffect = getFirstEffect(sk.getId());
					if (toggleEffect != null)
					{
						// stop old toggle skill effect, and give new toggle skill effect back
						toggleEffect.exit();
						sk.getEffects(this, this);
					}
				}
				addSkill(sk, true);
			}
			
			//Get new available skills, some skills depend of previous skills to be available.
			skills = SkillTreesData.getInstance().getAvailableSkills(this, getClassId(), includedByFs, includeAutoGet);
		}
		
		sendMessage("You have learned " + skillCounter + " new skills.");
		return skillCounter;
	}
	
	/**
	 * Give all available AutoGet skills to the player.<br>
	 */
	public void giveAvailableAutoGetSkills()
	{
		// Get available skills
		final FastList<L2SkillLearn> autoGetSkills = SkillTreesData.getInstance().getAvailableAutoGetSkills(this);
		
		if ((autoGetSkills != null) && !autoGetSkills.isEmpty())
		{
			for (L2SkillLearn s: autoGetSkills)
			{
				final L2Skill skill = SkillTable.getInstance().getInfo(s.getSkillId(), s.getSkillLevel());
				if (skill != null)
				{
					addSkill(skill, true);
				}
				else
				{
					_log.warning("Skipped null autoGet Skill for player:" + getName() + "[" + getObjectId() + "]");
				}
			}
		}
	}
	
	 public L2Skill addSkill(L2Skill newSkill, boolean store)
	{
		// Add a skill to the L2PcInstance _skills and its Func objects to the calculator set of the L2PcInstance
		L2Skill oldSkill = super.addSkill(newSkill);
		
		// Add or update a L2PcInstance skill in the character_skills table of the database
		if (store)
		{
			storeSkill(newSkill, oldSkill, -1);
		}
		return oldSkill;
	}
Добавлено через 1 минуту
Код:
public FastList<L2SkillLearn> getAvailableSkills(L2PcInstance player, ClassId classId, boolean includeByFs, boolean includeAutoGet)
	{
		final FastList<L2SkillLearn> result = new FastList<L2SkillLearn>();
		final FastMap<Integer, L2SkillLearn> skills = getCompleteClassSkillTree(classId);
		
		if (skills.isEmpty())
		{
			// The Skill Tree for this class is undefined.
			_log.warning(getClass().getSimpleName() + ": Skilltree for class " + classId + " is not defined!");
			return result;
		}
		
		final L2Skill[] oldSkills = player.getAllSkills();
		for (L2SkillLearn temp : skills.values())
		{
			if (((includeAutoGet && temp.isAutoGet()) || temp.isLearnedByNpc() || (includeByFs && temp.isLearnedByFS())) && (player.getLevel() >= temp.getGetLevel()))
			{
				boolean knownSkill = false;
				
				for (int j = 0; (j < oldSkills.length) && !knownSkill; j++)
				{
					if (oldSkills[j].getId() == temp.getSkillId())
					{
						if (oldSkills[j].getLevel() == (temp.getSkillLevel() - 1))
						{
							// This is the next level of a known skill:
							result.add(temp);
						}
						knownSkill = true;
					}
				}
				
				if (!knownSkill && (temp.getSkillLevel() == 1))
				{
					// This is a new skill:
					result.add(temp);
				}
			}
		}
		return result;
	}

Последний раз редактировалось orionpvp; 03.01.2013 в 01:56. Причина: Добавлено сообщение
orionpvp вне форума Отправить сообщение для orionpvp с помощью ICQ Отправить сообщение для orionpvp с помощью Skype™ Ответить с цитированием
Непрочитано 03.01.2013, 05:33   #2
Аватар для Silvern
Пользователь

По умолчанию Re: Лаги при взятии профы или смене саба

Сборка чья? Или на лыже пилим?
Silvern вне форума Ответить с цитированием
Непрочитано 03.01.2013, 14:01   #3
Аватар для 4ipolino
Пользователь

По умолчанию Re: Лаги при взятии профы или смене саба

Цитата:
Сообщение от Silvern Посмотреть сообщение
Сборка чья? Или на лыже пилим?
SkillTreesData.java - L2J SVN
метод загуглить тяжело?
4ipolino вне форума Отправить сообщение для 4ipolino с помощью ICQ Ответить с цитированием
Непрочитано 04.01.2013, 08:03   #4
Пользователь

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

Сборка L2jserver.com Freya
orionpvp вне форума Отправить сообщение для orionpvp с помощью ICQ Отправить сообщение для orionpvp с помощью Skype™ Ответить с цитированием
Непрочитано 05.01.2013, 20:29   #5
Пользователь

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

Скилы которые должны быть выучены находяться в хмл файле.
У гладиатора к примеру у скила "Трипл соник слеш" 22 уровня, при взятии второй профы учаться все 22 лвла подряд.
Можно ли сделать так что бы учился 22рой лвл без выученого 21вого?
Если я оставляю в хмл файлле только 22рой лвл без предыдущих - скил не изучаеться.
Когда я убрал проверку
Код:
if (oldSkills[j].getLevel() == (temp.getSkillLevel() - 1))
						{
							// This is the next level of a known skill:
							result.add(temp);
						}
и вписал вместо этого кода - просто
Код:
result.add(temp)
-при создании персонажа сервер зависает с ошибкой.
orionpvp вне форума Отправить сообщение для orionpvp с помощью ICQ Отправить сообщение для orionpvp с помощью Skype™ Ответить с цитированием
Непрочитано 06.01.2013, 13:10   #6
Аватар для Visor

По умолчанию Re: Лаги при взятии профы или смене саба

Много пакетов идет на клиент тяжелых, поэтому и лаг в клиенте получается.
__________________
L2Emu Enterprise Server
Visor вне форума Отправить сообщение для Visor с помощью ICQ Отправить сообщение для Visor с помощью Skype™ Ответить с цитированием
Ответ


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

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

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

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

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в CCP при взятии саба дает скилы до 3профы zasov Lineage II 1 12.12.2008 01:10


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

Вверх