Перейти к содержанию
Авторизация  
voland3

Докаст скиллов

Рекомендуемые сообщения

Здравствуйте, дорогие форумчане.

 

Есть одна проблема! При касте скилла  в противника и при его заходе за колону ил за какой-нибудь объект, каст не прерывается. Что далать ? И где копать ? 

Заранее огромное спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Здравствуйте, дорогие форумчане.

 

Есть одна проблема! При касте скилла  в противника и при его заходе за колону ил за какой-нибудь объект, каст не прерывается. Что далать ? И где копать ? 

Заранее огромное спасибо.

L2Character \ L2PcInstance. 

 

[spoiler=Метод onMagicLaunchedTimer]

		if ((targets.length > 0) && (escapeRange > 0))
		{
			int skipRange = 0;
			int skipLOS = 0;
			int skipPeaceZone = 0;
			final List<L2Object> targetList = new ArrayList<>();
			
			for (L2Object trg : targets)
			{
				if (trg instanceof L2Character)
				{
					if (!isInsideRadius(trg.getX(), trg.getY(), trg.getZ(), escapeRange + getTemplate().getCollisionRadius(), true, false))
					{
						skipRange++;
						continue;
					}
					
					// Healing party members should ignore LOS.
					if (((skill.getTargetType() != L2TargetType.PARTY) || !skill.hasEffectType(L2EffectType.HEAL)) //
						&& !GeoData.getInstance().canSeeTarget(this, trg))
					{
						skipLOS++;
						continue;
					}
					
					if (skill.isBad())
					{
						if (isPlayer())
						{
							if (((L2Character) trg).isInsidePeaceZone(getActingPlayer()))
							{
								skipPeaceZone++;
								continue;
							}
						}
						else
						{
							if (((L2Character) trg).isInsidePeaceZone(this, trg))
							{
								skipPeaceZone++;
								continue;
							}
						}
					}
					targetList.add(trg);
				}
			}
			if (targetList.isEmpty())
			{
				if (isPlayer())
				{
					if (skipRange > 0)
					{
						sendPacket(SystemMessageId.DIST_TOO_FAR_CASTING_STOPPED);
					}
					else if (skipLOS > 0)
					{
						sendPacket(SystemMessageId.CANT_SEE_TARGET);
					}
					else if (skipPeaceZone > 0)
					{
						sendPacket(SystemMessageId.A_MALICIOUS_SKILL_CANNOT_BE_USED_IN_PEACE_ZONE);
					}
				}
				
				switch (skill.getTargetType())
				{
				// only AURA-type skills can be cast without target
					case AURA:
					case FRONT_AURA:
					case BEHIND_AURA:
					case AURA_CORPSE_MOB:
					case SELF:
						break;
					default:
						abortCast();
						ThreadPoolManager.getInstance().scheduleAi(new Rotation(this, targets[0], skill), 0);
						return;
				}
			}
			mut.setTargets(targetList.toArray(new L2Object[targetList.size()]));
		}

 

 

Изменено пользователем zGosu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

L2Character \ L2PcInstance. 

 

[spoiler=Метод onMagicLaunchedTimer]

		if ((targets.length > 0) && (escapeRange > 0))
		{
			int skipRange = 0;
			int skipLOS = 0;
			int skipPeaceZone = 0;
			final List<L2Object> targetList = new ArrayList<>();
			
			for (L2Object trg : targets)
			{
				if (trg instanceof L2Character)
				{
					if (!isInsideRadius(trg.getX(), trg.getY(), trg.getZ(), escapeRange + getTemplate().getCollisionRadius(), true, false))
					{
						skipRange++;
						continue;
					}
					
					// Healing party members should ignore LOS.
					if (((skill.getTargetType() != L2TargetType.PARTY) || !skill.hasEffectType(L2EffectType.HEAL)) //
						&& !GeoData.getInstance().canSeeTarget(this, trg))
					{
						skipLOS++;
						continue;
					}
					
					if (skill.isBad())
					{
						if (isPlayer())
						{
							if (((L2Character) trg).isInsidePeaceZone(getActingPlayer()))
							{
								skipPeaceZone++;
								continue;
							}
						}
						else
						{
							if (((L2Character) trg).isInsidePeaceZone(this, trg))
							{
								skipPeaceZone++;
								continue;
							}
						}
					}
					targetList.add(trg);
				}
			}
			if (targetList.isEmpty())
			{
				if (isPlayer())
				{
					if (skipRange > 0)
					{
						sendPacket(SystemMessageId.DIST_TOO_FAR_CASTING_STOPPED);
					}
					else if (skipLOS > 0)
					{
						sendPacket(SystemMessageId.CANT_SEE_TARGET);
					}
					else if (skipPeaceZone > 0)
					{
						sendPacket(SystemMessageId.A_MALICIOUS_SKILL_CANNOT_BE_USED_IN_PEACE_ZONE);
					}
				}
				
				switch (skill.getTargetType())
				{
				// only AURA-type skills can be cast without target
					case AURA:
					case FRONT_AURA:
					case BEHIND_AURA:
					case AURA_CORPSE_MOB:
					case SELF:
						break;
					default:
						abortCast();
						ThreadPoolManager.getInstance().scheduleAi(new Rotation(this, targets[0], skill), 0);
						return;
				}
			}
			mut.setTargets(targetList.toArray(new L2Object[targetList.size()]));
		}

 

 

Не видел ни 1 сборку где был нормально реализован докаст. Время обрыва 0.5 сек. У себя реализовал, на остальных говноявах сборках это 0.4 сек, из-за чего анимация докаста есть, а дпса нету, хотя по офу и анимация должна обрываться. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Можно ли это реализовать ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Можно ли это реализовать ?

				// Create a task MagicUseTask to launch the MagicSkill at the end of the casting time (skillTime)
				// For client animation reasons (party buffs especially) 500 ms before!
				_skillCast = ThreadPoolManager.getInstance().scheduleEffect(mut, skillTime - 500); 

 

 

 

500 - ОФФ значение. Этим значением и манипулируешь. 

Изменено пользователем zGosu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. И еще один вопрос. Посоветуйте пожалуйста, нормальную среду для работы с исходниками ява. Если можно на подобии dev c++

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Спасибо. И еще один вопрос. Посоветуйте пожалуйста, нормальную среду для работы с исходниками ява. Если можно на подобии dev c++

Использую Eclipce и не хочу ни на что менять. Всё в нем устраивает) 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да эклипс хорош )) Но он как ВисуалСтудио, уж больно увесистый )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

огромное спасибо за помощь)) Даже не думал что так хорошо помогут )))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да эклипс хорош )) Но он как ВисуалСтудио, уж больно увесистый )))

Ну,  эклипс в раз 20  менее увесистый, чем вижуал.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Проблеме не решена, все  еще нужна помощь ((

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...